Bug 1385003 - Autogenerated changes to go with webrender update. r?jrmuizel draft
authorKartikaya Gupta <kgupta@mozilla.com>
Wed, 09 Aug 2017 08:46:25 -0400
changeset 643286 725fe3585df5405b91a8f406de56640f1e203606
parent 643285 98910b58d8ee1f3316a4656f67d437a6b9946d46
child 643287 65f5f3f37c960d459e8afba62dd59891f1743f4c
push id73049
push userkgupta@mozilla.com
push dateWed, 09 Aug 2017 14:47:44 +0000
reviewersjrmuizel
bugs1385003
milestone57.0a1
Bug 1385003 - Autogenerated changes to go with webrender update. r?jrmuizel This regenerates the cargo lockfiles and FFI bindings header. It also revendors the third_party/rust libraries. MozReview-Commit-ID: ID0YhoIH6cz
gfx/webrender_bindings/webrender_ffi_generated.h
third_party/rust/freetype/.cargo-checksum.json
third_party/rust/freetype/Cargo.toml
third_party/rust/freetype/etc/bindgen.sh
third_party/rust/freetype/etc/bindings.h
third_party/rust/freetype/src/freetype.rs
third_party/rust/fxhash/.cargo-checksum.json
third_party/rust/fxhash/.cargo-ok
third_party/rust/fxhash/Cargo.toml
third_party/rust/fxhash/README.md
third_party/rust/fxhash/bench.rs
third_party/rust/fxhash/lib.rs
third_party/rust/heapsize-0.3.8/.cargo-checksum.json
third_party/rust/heapsize-0.3.8/.cargo-ok
third_party/rust/heapsize-0.3.8/.travis.yml
third_party/rust/heapsize-0.3.8/Cargo.toml
third_party/rust/heapsize-0.3.8/README.md
third_party/rust/heapsize-0.3.8/appveyor.yml
third_party/rust/heapsize-0.3.8/build.rs
third_party/rust/heapsize-0.3.8/src/lib.rs
third_party/rust/heapsize-0.3.8/tests/tests.rs
toolkit/library/gtest/rust/Cargo.lock
toolkit/library/rust/Cargo.lock
--- a/gfx/webrender_bindings/webrender_ffi_generated.h
+++ b/gfx/webrender_bindings/webrender_ffi_generated.h
@@ -1,13 +1,13 @@
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
-/* Generated with cbindgen:0.1.19 */
+/* Generated with cbindgen:0.1.20 */
 
 /* DO NOT MODIFY THIS MANUALLY! This file was generated using cbindgen.
  * To generate this file:
  *   1. Get the latest cbindgen using `cargo install --force cbindgen`
  *      a. Alternatively, you can clone `https://github.com/rlhunt/cbindgen` and use a tagged release
  *   2. Run `cbindgen toolkit/library/rust/ --crate webrender_bindings -o gfx/webrender_bindings/webrender_ffi_generated.h`
  */
 
@@ -139,19 +139,19 @@ enum class YuvColorSpace : uint32_t {
   Rec601 = 0,
   Rec709 = 1,
 
   Sentinel /* this must be last for serialization purposes. */
 };
 
 struct Arc_VecU8;
 
-struct LayerPixel;
+struct DocumentHandle;
 
-struct RenderApi;
+struct LayerPixel;
 
 struct Renderer;
 
 struct Vec_u8;
 
 struct WrRenderedEpochs;
 
 struct WrState;
@@ -250,18 +250,20 @@ struct Epoch {
   }
   bool operator<=(const Epoch& aOther) const {
     return mHandle <= aOther.mHandle;
   }
 };
 
 typedef Epoch WrEpoch;
 
+typedef uint32_t PipelineSourceId;
+
 struct PipelineId {
-  uint32_t mNamespace;
+  PipelineSourceId mNamespace;
   uint32_t mHandle;
 
   bool operator==(const PipelineId& aOther) const {
     return mNamespace == aOther.mNamespace &&
            mHandle == aOther.mHandle;
   }
 };
 
@@ -280,21 +282,23 @@ struct TypedSize2D_f32__LayerPixel {
 typedef TypedSize2D_f32__LayerPixel LayerSize;
 
 typedef LayerSize LayoutSize;
 
 struct BuiltDisplayListDescriptor {
   uint64_t builder_start_time;
   uint64_t builder_finish_time;
   uint64_t send_start_time;
+  size_t glyph_offset;
 
   bool operator==(const BuiltDisplayListDescriptor& aOther) const {
     return builder_start_time == aOther.builder_start_time &&
            builder_finish_time == aOther.builder_finish_time &&
-           send_start_time == aOther.send_start_time;
+           send_start_time == aOther.send_start_time &&
+           glyph_offset == aOther.glyph_offset;
   }
 };
 
 struct WrVecU8 {
   uint8_t *data;
   size_t length;
   size_t capacity;
 
@@ -449,44 +453,44 @@ struct GradientStop {
   ColorF color;
 
   bool operator==(const GradientStop& aOther) const {
     return offset == aOther.offset &&
            color == aOther.color;
   }
 };
 
+struct SideOffsets2D_u32 {
+  uint32_t top;
+  uint32_t right;
+  uint32_t bottom;
+  uint32_t left;
+
+  bool operator==(const SideOffsets2D_u32& aOther) const {
+    return top == aOther.top &&
+           right == aOther.right &&
+           bottom == aOther.bottom &&
+           left == aOther.left;
+  }
+};
+
 struct SideOffsets2D_f32 {
   float top;
   float right;
   float bottom;
   float left;
 
   bool operator==(const SideOffsets2D_f32& aOther) const {
     return top == aOther.top &&
            right == aOther.right &&
            bottom == aOther.bottom &&
            left == aOther.left;
   }
 };
 
-struct SideOffsets2D_u32 {
-  uint32_t top;
-  uint32_t right;
-  uint32_t bottom;
-  uint32_t left;
-
-  bool operator==(const SideOffsets2D_u32& aOther) const {
-    return top == aOther.top &&
-           right == aOther.right &&
-           bottom == aOther.bottom &&
-           left == aOther.left;
-  }
-};
-
 struct NinePatchDescriptor {
   uint32_t width;
   uint32_t height;
   SideOffsets2D_u32 slice;
 
   bool operator==(const NinePatchDescriptor& aOther) const {
     return width == aOther.width &&
            height == aOther.height &&
@@ -535,18 +539,20 @@ struct WrFilterOp {
   float argument;
 
   bool operator==(const WrFilterOp& aOther) const {
     return filter_type == aOther.filter_type &&
            argument == aOther.argument;
   }
 };
 
+typedef uint32_t GlyphIndex;
+
 struct GlyphInstance {
-  uint32_t index;
+  GlyphIndex index;
   LayoutPoint point;
 
   bool operator==(const GlyphInstance& aOther) const {
     return index == aOther.index &&
            point == aOther.point;
   }
 };
 
@@ -621,136 +627,141 @@ struct WrExternalImageHandler {
  *   2. Run `cbindgen toolkit/library/rust/ --crate webrender_bindings -o gfx/webrender_bindings/webrender_ffi_generated.h`
  */
 
 WR_INLINE
 const VecU8 *wr_add_ref_arc(const ArcVecU8 *aArc)
 WR_FUNC;
 
 WR_INLINE
-void wr_api_add_blob_image(RenderApi *aApi,
+void wr_api_add_blob_image(DocumentHandle *aDh,
                            WrImageKey aImageKey,
                            const WrImageDescriptor *aDescriptor,
                            ByteSlice aBytes)
 WR_FUNC;
 
 WR_INLINE
-void wr_api_add_external_image(RenderApi *aApi,
+void wr_api_add_external_image(DocumentHandle *aDh,
                                WrImageKey aImageKey,
                                const WrImageDescriptor *aDescriptor,
                                WrExternalImageId aExternalImageId,
                                WrExternalImageBufferType aBufferType,
                                uint8_t aChannelIndex)
 WR_FUNC;
 
 WR_INLINE
-void wr_api_add_image(RenderApi *aApi,
+void wr_api_add_image(DocumentHandle *aDh,
                       WrImageKey aImageKey,
                       const WrImageDescriptor *aDescriptor,
                       ByteSlice aBytes)
 WR_FUNC;
 
 WR_INLINE
-void wr_api_add_raw_font(RenderApi *aApi,
+void wr_api_add_raw_font(DocumentHandle *aDh,
                          WrFontKey aKey,
                          uint8_t *aFontBuffer,
                          size_t aBufferSize,
                          uint32_t aIndex)
 WR_FUNC;
 
 WR_INLINE
-void wr_api_clear_root_display_list(RenderApi *aApi,
+void wr_api_clear_root_display_list(DocumentHandle *aDh,
                                     WrEpoch aEpoch,
                                     WrPipelineId aPipelineId)
 WR_FUNC;
 
 WR_INLINE
-void wr_api_delete(RenderApi *aApi)
+void wr_api_clone(DocumentHandle *aDh,
+                  DocumentHandle **aOutHandle)
+WR_FUNC;
+
+WR_INLINE
+void wr_api_delete(DocumentHandle *aDh)
 WR_DESTRUCTOR_SAFE_FUNC;
 
 WR_INLINE
-void wr_api_delete_font(RenderApi *aApi,
+void wr_api_delete_font(DocumentHandle *aDh,
                         WrFontKey aKey)
 WR_FUNC;
 
 WR_INLINE
-void wr_api_delete_image(RenderApi *aApi,
+void wr_api_delete_image(DocumentHandle *aDh,
                          WrImageKey aKey)
 WR_FUNC;
 
 WR_INLINE
 void wr_api_finalize_builder(WrState *aState,
                              LayoutSize *aContentSize,
                              BuiltDisplayListDescriptor *aDlDescriptor,
                              WrVecU8 *aDlData)
 WR_FUNC;
 
 WR_INLINE
-void wr_api_generate_frame(RenderApi *aApi)
+void wr_api_generate_frame(DocumentHandle *aDh)
 WR_FUNC;
 
 WR_INLINE
-void wr_api_generate_frame_with_properties(RenderApi *aApi,
+void wr_api_generate_frame_with_properties(DocumentHandle *aDh,
                                            const WrOpacityProperty *aOpacityArray,
                                            size_t aOpacityCount,
                                            const WrTransformProperty *aTransformArray,
                                            size_t aTransformCount)
 WR_FUNC;
 
 WR_INLINE
-WrIdNamespace wr_api_get_namespace(RenderApi *aApi)
+WrIdNamespace wr_api_get_namespace(DocumentHandle *aDh)
 WR_FUNC;
 
 WR_INLINE
-void wr_api_send_external_event(RenderApi *aApi,
+void wr_api_send_external_event(DocumentHandle *aDh,
                                 size_t aEvt)
 WR_DESTRUCTOR_SAFE_FUNC;
 
 WR_INLINE
-void wr_api_set_root_display_list(RenderApi *aApi,
+void wr_api_set_root_display_list(DocumentHandle *aDh,
                                   ColorF aColor,
                                   WrEpoch aEpoch,
                                   float aViewportWidth,
                                   float aViewportHeight,
                                   WrPipelineId aPipelineId,
                                   LayoutSize aContentSize,
                                   BuiltDisplayListDescriptor aDlDescriptor,
                                   uint8_t *aDlData,
                                   size_t aDlSize)
 WR_FUNC;
 
 WR_INLINE
-void wr_api_set_root_pipeline(RenderApi *aApi,
+void wr_api_set_root_pipeline(DocumentHandle *aDh,
                               WrPipelineId aPipelineId)
 WR_FUNC;
 
 WR_INLINE
-void wr_api_set_window_parameters(RenderApi *aApi,
+void wr_api_set_window_parameters(DocumentHandle *aDh,
                                   int32_t aWidth,
                                   int32_t aHeight)
 WR_FUNC;
 
 WR_INLINE
-void wr_api_update_blob_image(RenderApi *aApi,
+void wr_api_update_blob_image(DocumentHandle *aDh,
                               WrImageKey aImageKey,
                               const WrImageDescriptor *aDescriptor,
                               ByteSlice aBytes)
 WR_FUNC;
 
 WR_INLINE
-void wr_api_update_external_image(RenderApi *aApi,
+void wr_api_update_external_image(DocumentHandle *aDh,
                                   WrImageKey aKey,
                                   const WrImageDescriptor *aDescriptor,
                                   WrExternalImageId aExternalImageId,
                                   WrExternalImageBufferType aImageType,
                                   uint8_t aChannelIndex)
 WR_FUNC;
 
 WR_INLINE
-void wr_api_update_image(RenderApi *aApi,
+void wr_api_update_image(DocumentHandle *aDh,
                          WrImageKey aKey,
                          const WrImageDescriptor *aDescriptor,
                          ByteSlice aBytes)
 WR_FUNC;
 
 WR_INLINE
 void wr_dec_ref_arc(const VecU8 *aArc)
 WR_FUNC;
@@ -1021,17 +1032,17 @@ void wr_renderer_set_profiler_enabled(Re
                                       bool aEnabled)
 WR_FUNC;
 
 WR_INLINE
 void wr_renderer_update(Renderer *aRenderer)
 WR_FUNC;
 
 WR_INLINE
-void wr_scroll_layer_with_id(RenderApi *aApi,
+void wr_scroll_layer_with_id(DocumentHandle *aDh,
                              WrPipelineId aPipelineId,
                              uint64_t aScrollId,
                              LayoutPoint aNewScrollOrigin)
 WR_FUNC;
 
 WR_INLINE
 void wr_state_delete(WrState *aState)
 WR_DESTRUCTOR_SAFE_FUNC;
@@ -1055,17 +1066,17 @@ WR_FUNC;
 
 WR_INLINE
 bool wr_window_new(WrWindowId aWindowId,
                    uint32_t aWindowWidth,
                    uint32_t aWindowHeight,
                    void *aGlContext,
                    WrThreadPool *aThreadPool,
                    bool aEnableProfiler,
-                   RenderApi **aOutApi,
+                   DocumentHandle **aOutHandle,
                    Renderer **aOutRenderer)
 WR_FUNC;
 
 } // namespace wr
 } // namespace mozilla
 
 } // extern "C"
 
--- a/third_party/rust/freetype/.cargo-checksum.json
+++ b/third_party/rust/freetype/.cargo-checksum.json
@@ -1,1 +1,1 @@
-{"files":{".cargo-ok":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",".travis.yml":"b66e958a27e280a79ae1742be91e02cbaf7392851d430f19b13f3619861860e2","COPYRIGHT":"ec82b96487e9e778ee610c7ab245162464782cfa1f555c2299333f8dbe5c036a","Cargo.toml":"7d09decba6c94743746eb13ebd51735356ec6a1125d33da708d3e141148c81c3","LICENSE-APACHE":"a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2","LICENSE-MIT":"62065228e42caebca7e7d7db1204cbb867033de5982ca4009928915e4095f3a3","Makefile.in":"7348b5f8a577048279b3f98e2c2b5705f506cf5b4b1e6bb542cc0b1e62468411","README.md":"755e885eb12f7b0b459c8b579f20cd941e55f0197b947591131daf048c5d7bc6","configure":"e0e6ba778e5f5784fa87abf235aa4f3da750d922bfb26a34803d9674577d56ec","etc/bindgen.sh":"116938e8c7a4500e056f719c66bdc896739c8b0a34a16e6a29a9e335f7458648","etc/bindings.h":"f6110c7a692e24f9c6d1c4a78ba8a7750952b397b86a5ac466353c7c57cfb7bb","src/freetype.rs":"0e27e13cca4f79569718fa4c247b8f7020388d8a84ad5f971c376a0658073cfa","src/lib.rs":"812e79af46e33a93420c8301ad95392f5e8a57266b3e43c47085c6dd0c63653f","src/tt_os2.rs":"9517c53fc4e575ceb615d554dc72812dcbb532bf94883d51202b24caae1a1418"},"package":"fde23272c687e4570aefec06cb71174ec0f5284b725deac4e77ba2665d635faf"}
\ No newline at end of file
+{"files":{".cargo-ok":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",".travis.yml":"b66e958a27e280a79ae1742be91e02cbaf7392851d430f19b13f3619861860e2","COPYRIGHT":"ec82b96487e9e778ee610c7ab245162464782cfa1f555c2299333f8dbe5c036a","Cargo.toml":"ec1a0a3ceb37de795193e244fb3781cf87d25ea610f150976958468881da76a7","LICENSE-APACHE":"a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2","LICENSE-MIT":"62065228e42caebca7e7d7db1204cbb867033de5982ca4009928915e4095f3a3","Makefile.in":"7348b5f8a577048279b3f98e2c2b5705f506cf5b4b1e6bb542cc0b1e62468411","README.md":"755e885eb12f7b0b459c8b579f20cd941e55f0197b947591131daf048c5d7bc6","configure":"e0e6ba778e5f5784fa87abf235aa4f3da750d922bfb26a34803d9674577d56ec","etc/bindgen.sh":"39c1d5298f6e46380f0616d6080bd2c3ead5f04149bcf5b7345c56dae2000e79","etc/bindings.h":"b531980f5739536dfc1484236d436efd18f448b4ea15001d1dfbbaf381ad054f","src/freetype.rs":"445a3d48974dcf22961b612ef6cdef48c2dedc1ccc6e73a88eee53fa601859d8","src/lib.rs":"812e79af46e33a93420c8301ad95392f5e8a57266b3e43c47085c6dd0c63653f","src/tt_os2.rs":"9517c53fc4e575ceb615d554dc72812dcbb532bf94883d51202b24caae1a1418"},"package":"398b8a11884898184d55aca9806f002b3cf68f0e860e0cbb4586f834ee39b0e7"}
\ No newline at end of file
--- a/third_party/rust/freetype/Cargo.toml
+++ b/third_party/rust/freetype/Cargo.toml
@@ -1,19 +1,33 @@
+# THIS FILE IS AUTOMATICALLY GENERATED BY CARGO
+#
+# When uploading crates to the registry Cargo will automatically
+# "normalize" Cargo.toml files for maximal compatibility
+# with all versions of Cargo and also rewrite `path` dependencies
+# to registry (e.g. crates.io) dependencies
+#
+# If you believe there's an error in this file please file an
+# issue against the rust-lang/cargo repository. If you're
+# editing this file be aware that the upstream Cargo.toml
+# will likely look very different (and much more reasonable)
+
 [package]
-description = "Bindings for Freetype used by Servo"
-license = "Apache-2.0 / MIT"
 name = "freetype"
-version = "0.2.0"
+version = "0.3.0"
 authors = ["The Servo Project Developers"]
+description = "Bindings for Freetype used by Servo"
 documentation = "http://doc.servo.org/freetype/"
+license = "Apache-2.0 / MIT"
 repository = "https://github.com/servo/rust-freetype"
 
-[features]
-default = ["servo-freetype-sys"]
-
 [lib]
 name = "freetype"
 crate-type = ["rlib"]
+[dependencies.servo-freetype-sys]
+version = "4.0.2"
+optional = true
 
-[dependencies]
-servo-freetype-sys = { version = "4.0.2", optional = true }
-libc = "0.2"
+[dependencies.libc]
+version = "0.2"
+
+[features]
+default = ["servo-freetype-sys"]
--- a/third_party/rust/freetype/etc/bindgen.sh
+++ b/third_party/rust/freetype/etc/bindgen.sh
@@ -2,17 +2,16 @@
 
 cd "$(dirname $0)"
 
 # We replace the FT_ integer types of known widths, since we can do better.
 #
 # We blacklist FT_Error and import our own in order to have convenience methods
 # on it instead of being a plain integer.
 "${BINDGEN}" bindings.h -o ../src/freetype.rs \
-  --no-unstable-rust \
   --blacklist-type "FT_(Int16|UInt16|Int32|UInt32|Int16|Int64|UInt64)" \
   --raw-line "pub type FT_Int16 = i16;" \
   --raw-line "pub type FT_UInt16 = u16;" \
   --raw-line "pub type FT_Int32 = i32;" \
   --raw-line "pub type FT_UInt32 = u32;" \
   --raw-line "pub type FT_Int64= i64;" \
   --raw-line "pub type FT_UInt64= u64;" \
   --blacklist-type "FT_Error" \
--- a/third_party/rust/freetype/etc/bindings.h
+++ b/third_party/rust/freetype/etc/bindings.h
@@ -1,5 +1,6 @@
 #include <freetype2/ft2build.h>
 #include <freetype2/freetype/freetype.h>
 #include <freetype2/freetype/ftlcdfil.h>
 #include <freetype2/freetype/tttables.h>
 #include <freetype2/freetype/ftmodapi.h>
+#include <freetype2/freetype/ftoutln.h>
--- a/third_party/rust/freetype/src/freetype.rs
+++ b/third_party/rust/freetype/src/freetype.rs
@@ -94,17 +94,16 @@ pub const FT_LOAD_PEDANTIC: ::std::os::r
 pub const FT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH: ::std::os::raw::c_uint = 512;
 pub const FT_LOAD_NO_RECURSE: ::std::os::raw::c_uint = 1024;
 pub const FT_LOAD_IGNORE_TRANSFORM: ::std::os::raw::c_uint = 2048;
 pub const FT_LOAD_MONOCHROME: ::std::os::raw::c_uint = 4096;
 pub const FT_LOAD_LINEAR_DESIGN: ::std::os::raw::c_uint = 8192;
 pub const FT_LOAD_NO_AUTOHINT: ::std::os::raw::c_uint = 32768;
 pub const FT_LOAD_COLOR: ::std::os::raw::c_uint = 1048576;
 pub const FT_LOAD_COMPUTE_METRICS: ::std::os::raw::c_uint = 2097152;
-pub const FT_LOAD_BITMAP_METRICS_ONLY: ::std::os::raw::c_uint = 4194304;
 pub const FT_LOAD_ADVANCE_ONLY: ::std::os::raw::c_uint = 256;
 pub const FT_LOAD_SBITS_ONLY: ::std::os::raw::c_uint = 16384;
 pub const FT_SUBGLYPH_FLAG_ARGS_ARE_WORDS: ::std::os::raw::c_uint = 1;
 pub const FT_SUBGLYPH_FLAG_ARGS_ARE_XY_VALUES: ::std::os::raw::c_uint = 2;
 pub const FT_SUBGLYPH_FLAG_ROUND_XY_TO_GRID: ::std::os::raw::c_uint = 4;
 pub const FT_SUBGLYPH_FLAG_SCALE: ::std::os::raw::c_uint = 8;
 pub const FT_SUBGLYPH_FLAG_XY_SCALE: ::std::os::raw::c_uint = 64;
 pub const FT_SUBGLYPH_FLAG_2X2: ::std::os::raw::c_uint = 128;
@@ -130,18 +129,40 @@ pub type FT_UFast = ::std::os::raw::c_ui
 pub struct FT_MemoryRec_ {
     pub user: *mut ::std::os::raw::c_void,
     pub alloc: FT_Alloc_Func,
     pub free: FT_Free_Func,
     pub realloc: FT_Realloc_Func,
 }
 #[test]
 fn bindgen_test_layout_FT_MemoryRec_() {
-    assert_eq!(::std::mem::size_of::<FT_MemoryRec_>() , 32usize);
-    assert_eq!(::std::mem::align_of::<FT_MemoryRec_>() , 8usize);
+    assert_eq!(::std::mem::size_of::<FT_MemoryRec_>() , 32usize , concat ! (
+               "Size of: " , stringify ! ( FT_MemoryRec_ ) ));
+    assert_eq! (::std::mem::align_of::<FT_MemoryRec_>() , 8usize , concat ! (
+                "Alignment of " , stringify ! ( FT_MemoryRec_ ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_MemoryRec_ ) ) . user as * const _ as
+                usize } , 0usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_MemoryRec_ ) , "::"
+                , stringify ! ( user ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_MemoryRec_ ) ) . alloc as * const _ as
+                usize } , 8usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_MemoryRec_ ) , "::"
+                , stringify ! ( alloc ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_MemoryRec_ ) ) . free as * const _ as
+                usize } , 16usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_MemoryRec_ ) , "::"
+                , stringify ! ( free ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_MemoryRec_ ) ) . realloc as * const _
+                as usize } , 24usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_MemoryRec_ ) , "::"
+                , stringify ! ( realloc ) ));
 }
 impl Clone for FT_MemoryRec_ {
     fn clone(&self) -> Self { *self }
 }
 pub type FT_Memory = *mut FT_MemoryRec_;
 pub type FT_Alloc_Func =
     ::std::option::Option<unsafe extern "C" fn(memory: FT_Memory,
                                                size: ::std::os::raw::c_long)
@@ -170,83 +191,181 @@ pub struct FT_StreamRec_ {
     pub read: FT_Stream_IoFunc,
     pub close: FT_Stream_CloseFunc,
     pub memory: FT_Memory,
     pub cursor: *mut ::std::os::raw::c_uchar,
     pub limit: *mut ::std::os::raw::c_uchar,
 }
 #[test]
 fn bindgen_test_layout_FT_StreamRec_() {
-    assert_eq!(::std::mem::size_of::<FT_StreamRec_>() , 80usize);
-    assert_eq!(::std::mem::align_of::<FT_StreamRec_>() , 8usize);
+    assert_eq!(::std::mem::size_of::<FT_StreamRec_>() , 80usize , concat ! (
+               "Size of: " , stringify ! ( FT_StreamRec_ ) ));
+    assert_eq! (::std::mem::align_of::<FT_StreamRec_>() , 8usize , concat ! (
+                "Alignment of " , stringify ! ( FT_StreamRec_ ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_StreamRec_ ) ) . base as * const _ as
+                usize } , 0usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_StreamRec_ ) , "::"
+                , stringify ! ( base ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_StreamRec_ ) ) . size as * const _ as
+                usize } , 8usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_StreamRec_ ) , "::"
+                , stringify ! ( size ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_StreamRec_ ) ) . pos as * const _ as
+                usize } , 16usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_StreamRec_ ) , "::"
+                , stringify ! ( pos ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_StreamRec_ ) ) . descriptor as * const
+                _ as usize } , 24usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_StreamRec_ ) , "::"
+                , stringify ! ( descriptor ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_StreamRec_ ) ) . pathname as * const _
+                as usize } , 32usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_StreamRec_ ) , "::"
+                , stringify ! ( pathname ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_StreamRec_ ) ) . read as * const _ as
+                usize } , 40usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_StreamRec_ ) , "::"
+                , stringify ! ( read ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_StreamRec_ ) ) . close as * const _ as
+                usize } , 48usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_StreamRec_ ) , "::"
+                , stringify ! ( close ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_StreamRec_ ) ) . memory as * const _
+                as usize } , 56usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_StreamRec_ ) , "::"
+                , stringify ! ( memory ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_StreamRec_ ) ) . cursor as * const _
+                as usize } , 64usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_StreamRec_ ) , "::"
+                , stringify ! ( cursor ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_StreamRec_ ) ) . limit as * const _ as
+                usize } , 72usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_StreamRec_ ) , "::"
+                , stringify ! ( limit ) ));
 }
 impl Clone for FT_StreamRec_ {
     fn clone(&self) -> Self { *self }
 }
 pub type FT_Stream = *mut FT_StreamRec_;
 #[repr(C)]
 #[derive(Debug, Copy)]
 pub struct FT_StreamDesc_ {
     pub value: __BindgenUnionField<::std::os::raw::c_long>,
     pub pointer: __BindgenUnionField<*mut ::std::os::raw::c_void>,
     pub bindgen_union_field: u64,
 }
 #[test]
 fn bindgen_test_layout_FT_StreamDesc_() {
-    assert_eq!(::std::mem::size_of::<FT_StreamDesc_>() , 8usize);
-    assert_eq!(::std::mem::align_of::<FT_StreamDesc_>() , 8usize);
+    assert_eq!(::std::mem::size_of::<FT_StreamDesc_>() , 8usize , concat ! (
+               "Size of: " , stringify ! ( FT_StreamDesc_ ) ));
+    assert_eq! (::std::mem::align_of::<FT_StreamDesc_>() , 8usize , concat ! (
+                "Alignment of " , stringify ! ( FT_StreamDesc_ ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_StreamDesc_ ) ) . value as * const _
+                as usize } , 0usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_StreamDesc_ ) , "::"
+                , stringify ! ( value ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_StreamDesc_ ) ) . pointer as * const _
+                as usize } , 0usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_StreamDesc_ ) , "::"
+                , stringify ! ( pointer ) ));
 }
 impl Clone for FT_StreamDesc_ {
     fn clone(&self) -> Self { *self }
 }
-pub use self::FT_StreamDesc_ as FT_StreamDesc;
+pub type FT_StreamDesc = FT_StreamDesc_;
 pub type FT_Stream_IoFunc =
     ::std::option::Option<unsafe extern "C" fn(stream: FT_Stream,
                                                offset:
                                                    ::std::os::raw::c_ulong,
                                                buffer:
                                                    *mut ::std::os::raw::c_uchar,
                                                count: ::std::os::raw::c_ulong)
                               -> ::std::os::raw::c_ulong>;
 pub type FT_Stream_CloseFunc =
     ::std::option::Option<unsafe extern "C" fn(stream: FT_Stream)>;
-pub use self::FT_StreamRec_ as FT_StreamRec;
+pub type FT_StreamRec = FT_StreamRec_;
 pub type FT_Pos = ::std::os::raw::c_long;
 #[repr(C)]
 #[derive(Debug, Copy)]
 pub struct FT_Vector_ {
     pub x: FT_Pos,
     pub y: FT_Pos,
 }
 #[test]
 fn bindgen_test_layout_FT_Vector_() {
-    assert_eq!(::std::mem::size_of::<FT_Vector_>() , 16usize);
-    assert_eq!(::std::mem::align_of::<FT_Vector_>() , 8usize);
+    assert_eq!(::std::mem::size_of::<FT_Vector_>() , 16usize , concat ! (
+               "Size of: " , stringify ! ( FT_Vector_ ) ));
+    assert_eq! (::std::mem::align_of::<FT_Vector_>() , 8usize , concat ! (
+                "Alignment of " , stringify ! ( FT_Vector_ ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_Vector_ ) ) . x as * const _ as usize
+                } , 0usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_Vector_ ) , "::" ,
+                stringify ! ( x ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_Vector_ ) ) . y as * const _ as usize
+                } , 8usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_Vector_ ) , "::" ,
+                stringify ! ( y ) ));
 }
 impl Clone for FT_Vector_ {
     fn clone(&self) -> Self { *self }
 }
-pub use self::FT_Vector_ as FT_Vector;
+pub type FT_Vector = FT_Vector_;
 #[repr(C)]
 #[derive(Debug, Copy)]
 pub struct FT_BBox_ {
     pub xMin: FT_Pos,
     pub yMin: FT_Pos,
     pub xMax: FT_Pos,
     pub yMax: FT_Pos,
 }
 #[test]
 fn bindgen_test_layout_FT_BBox_() {
-    assert_eq!(::std::mem::size_of::<FT_BBox_>() , 32usize);
-    assert_eq!(::std::mem::align_of::<FT_BBox_>() , 8usize);
+    assert_eq!(::std::mem::size_of::<FT_BBox_>() , 32usize , concat ! (
+               "Size of: " , stringify ! ( FT_BBox_ ) ));
+    assert_eq! (::std::mem::align_of::<FT_BBox_>() , 8usize , concat ! (
+                "Alignment of " , stringify ! ( FT_BBox_ ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_BBox_ ) ) . xMin as * const _ as usize
+                } , 0usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_BBox_ ) , "::" ,
+                stringify ! ( xMin ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_BBox_ ) ) . yMin as * const _ as usize
+                } , 8usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_BBox_ ) , "::" ,
+                stringify ! ( yMin ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_BBox_ ) ) . xMax as * const _ as usize
+                } , 16usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_BBox_ ) , "::" ,
+                stringify ! ( xMax ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_BBox_ ) ) . yMax as * const _ as usize
+                } , 24usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_BBox_ ) , "::" ,
+                stringify ! ( yMax ) ));
 }
 impl Clone for FT_BBox_ {
     fn clone(&self) -> Self { *self }
 }
-pub use self::FT_BBox_ as FT_BBox;
+pub type FT_BBox = FT_BBox_;
 #[repr(u32)]
 #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
 pub enum FT_Pixel_Mode_ {
     FT_PIXEL_MODE_NONE = 0,
     FT_PIXEL_MODE_MONO = 1,
     FT_PIXEL_MODE_GRAY = 2,
     FT_PIXEL_MODE_GRAY2 = 3,
     FT_PIXEL_MODE_GRAY4 = 4,
@@ -265,42 +384,116 @@ pub struct FT_Bitmap_ {
     pub buffer: *mut ::std::os::raw::c_uchar,
     pub num_grays: ::std::os::raw::c_ushort,
     pub pixel_mode: ::std::os::raw::c_uchar,
     pub palette_mode: ::std::os::raw::c_uchar,
     pub palette: *mut ::std::os::raw::c_void,
 }
 #[test]
 fn bindgen_test_layout_FT_Bitmap_() {
-    assert_eq!(::std::mem::size_of::<FT_Bitmap_>() , 40usize);
-    assert_eq!(::std::mem::align_of::<FT_Bitmap_>() , 8usize);
+    assert_eq!(::std::mem::size_of::<FT_Bitmap_>() , 40usize , concat ! (
+               "Size of: " , stringify ! ( FT_Bitmap_ ) ));
+    assert_eq! (::std::mem::align_of::<FT_Bitmap_>() , 8usize , concat ! (
+                "Alignment of " , stringify ! ( FT_Bitmap_ ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_Bitmap_ ) ) . rows as * const _ as
+                usize } , 0usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_Bitmap_ ) , "::" ,
+                stringify ! ( rows ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_Bitmap_ ) ) . width as * const _ as
+                usize } , 4usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_Bitmap_ ) , "::" ,
+                stringify ! ( width ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_Bitmap_ ) ) . pitch as * const _ as
+                usize } , 8usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_Bitmap_ ) , "::" ,
+                stringify ! ( pitch ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_Bitmap_ ) ) . buffer as * const _ as
+                usize } , 16usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_Bitmap_ ) , "::" ,
+                stringify ! ( buffer ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_Bitmap_ ) ) . num_grays as * const _
+                as usize } , 24usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_Bitmap_ ) , "::" ,
+                stringify ! ( num_grays ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_Bitmap_ ) ) . pixel_mode as * const _
+                as usize } , 26usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_Bitmap_ ) , "::" ,
+                stringify ! ( pixel_mode ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_Bitmap_ ) ) . palette_mode as * const
+                _ as usize } , 27usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_Bitmap_ ) , "::" ,
+                stringify ! ( palette_mode ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_Bitmap_ ) ) . palette as * const _ as
+                usize } , 32usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_Bitmap_ ) , "::" ,
+                stringify ! ( palette ) ));
 }
 impl Clone for FT_Bitmap_ {
     fn clone(&self) -> Self { *self }
 }
-pub use self::FT_Bitmap_ as FT_Bitmap;
+pub type FT_Bitmap = FT_Bitmap_;
 #[repr(C)]
 #[derive(Debug, Copy)]
 pub struct FT_Outline_ {
     pub n_contours: ::std::os::raw::c_short,
     pub n_points: ::std::os::raw::c_short,
     pub points: *mut FT_Vector,
     pub tags: *mut ::std::os::raw::c_char,
     pub contours: *mut ::std::os::raw::c_short,
     pub flags: ::std::os::raw::c_int,
 }
 #[test]
 fn bindgen_test_layout_FT_Outline_() {
-    assert_eq!(::std::mem::size_of::<FT_Outline_>() , 40usize);
-    assert_eq!(::std::mem::align_of::<FT_Outline_>() , 8usize);
+    assert_eq!(::std::mem::size_of::<FT_Outline_>() , 40usize , concat ! (
+               "Size of: " , stringify ! ( FT_Outline_ ) ));
+    assert_eq! (::std::mem::align_of::<FT_Outline_>() , 8usize , concat ! (
+                "Alignment of " , stringify ! ( FT_Outline_ ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_Outline_ ) ) . n_contours as * const _
+                as usize } , 0usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_Outline_ ) , "::" ,
+                stringify ! ( n_contours ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_Outline_ ) ) . n_points as * const _
+                as usize } , 2usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_Outline_ ) , "::" ,
+                stringify ! ( n_points ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_Outline_ ) ) . points as * const _ as
+                usize } , 8usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_Outline_ ) , "::" ,
+                stringify ! ( points ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_Outline_ ) ) . tags as * const _ as
+                usize } , 16usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_Outline_ ) , "::" ,
+                stringify ! ( tags ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_Outline_ ) ) . contours as * const _
+                as usize } , 24usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_Outline_ ) , "::" ,
+                stringify ! ( contours ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_Outline_ ) ) . flags as * const _ as
+                usize } , 32usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_Outline_ ) , "::" ,
+                stringify ! ( flags ) ));
 }
 impl Clone for FT_Outline_ {
     fn clone(&self) -> Self { *self }
 }
-pub use self::FT_Outline_ as FT_Outline;
+pub type FT_Outline = FT_Outline_;
 pub type FT_Outline_MoveToFunc =
     ::std::option::Option<unsafe extern "C" fn(to: *const FT_Vector,
                                                user:
                                                    *mut ::std::os::raw::c_void)
                               -> ::std::os::raw::c_int>;
 pub type FT_Outline_LineToFunc =
     ::std::option::Option<unsafe extern "C" fn(to: *const FT_Vector,
                                                user:
@@ -326,58 +519,104 @@ pub struct FT_Outline_Funcs_ {
     pub line_to: FT_Outline_LineToFunc,
     pub conic_to: FT_Outline_ConicToFunc,
     pub cubic_to: FT_Outline_CubicToFunc,
     pub shift: ::std::os::raw::c_int,
     pub delta: FT_Pos,
 }
 #[test]
 fn bindgen_test_layout_FT_Outline_Funcs_() {
-    assert_eq!(::std::mem::size_of::<FT_Outline_Funcs_>() , 48usize);
-    assert_eq!(::std::mem::align_of::<FT_Outline_Funcs_>() , 8usize);
+    assert_eq!(::std::mem::size_of::<FT_Outline_Funcs_>() , 48usize , concat !
+               ( "Size of: " , stringify ! ( FT_Outline_Funcs_ ) ));
+    assert_eq! (::std::mem::align_of::<FT_Outline_Funcs_>() , 8usize , concat
+                ! ( "Alignment of " , stringify ! ( FT_Outline_Funcs_ ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_Outline_Funcs_ ) ) . move_to as *
+                const _ as usize } , 0usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_Outline_Funcs_ ) ,
+                "::" , stringify ! ( move_to ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_Outline_Funcs_ ) ) . line_to as *
+                const _ as usize } , 8usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_Outline_Funcs_ ) ,
+                "::" , stringify ! ( line_to ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_Outline_Funcs_ ) ) . conic_to as *
+                const _ as usize } , 16usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_Outline_Funcs_ ) ,
+                "::" , stringify ! ( conic_to ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_Outline_Funcs_ ) ) . cubic_to as *
+                const _ as usize } , 24usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_Outline_Funcs_ ) ,
+                "::" , stringify ! ( cubic_to ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_Outline_Funcs_ ) ) . shift as * const
+                _ as usize } , 32usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_Outline_Funcs_ ) ,
+                "::" , stringify ! ( shift ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_Outline_Funcs_ ) ) . delta as * const
+                _ as usize } , 40usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_Outline_Funcs_ ) ,
+                "::" , stringify ! ( delta ) ));
 }
 impl Clone for FT_Outline_Funcs_ {
     fn clone(&self) -> Self { *self }
 }
-pub use self::FT_Outline_Funcs_ as FT_Outline_Funcs;
+pub type FT_Outline_Funcs = FT_Outline_Funcs_;
 #[repr(u32)]
 #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
 pub enum FT_Glyph_Format_ {
     FT_GLYPH_FORMAT_NONE = 0,
     FT_GLYPH_FORMAT_COMPOSITE = 1668246896,
     FT_GLYPH_FORMAT_BITMAP = 1651078259,
     FT_GLYPH_FORMAT_OUTLINE = 1869968492,
     FT_GLYPH_FORMAT_PLOTTER = 1886154612,
 }
 pub use self::FT_Glyph_Format_ as FT_Glyph_Format;
 #[repr(C)]
-#[derive(Debug, Copy)]
+#[derive(Debug, Copy, Clone)]
 pub struct FT_RasterRec_ {
-    pub _address: u8,
-}
-impl Clone for FT_RasterRec_ {
-    fn clone(&self) -> Self { *self }
+    _unused: [u8; 0],
 }
 pub type FT_Raster = *mut FT_RasterRec_;
 #[repr(C)]
 #[derive(Debug, Copy)]
 pub struct FT_Span_ {
     pub x: ::std::os::raw::c_short,
     pub len: ::std::os::raw::c_ushort,
     pub coverage: ::std::os::raw::c_uchar,
 }
 #[test]
 fn bindgen_test_layout_FT_Span_() {
-    assert_eq!(::std::mem::size_of::<FT_Span_>() , 6usize);
-    assert_eq!(::std::mem::align_of::<FT_Span_>() , 2usize);
+    assert_eq!(::std::mem::size_of::<FT_Span_>() , 6usize , concat ! (
+               "Size of: " , stringify ! ( FT_Span_ ) ));
+    assert_eq! (::std::mem::align_of::<FT_Span_>() , 2usize , concat ! (
+                "Alignment of " , stringify ! ( FT_Span_ ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_Span_ ) ) . x as * const _ as usize }
+                , 0usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_Span_ ) , "::" ,
+                stringify ! ( x ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_Span_ ) ) . len as * const _ as usize
+                } , 2usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_Span_ ) , "::" ,
+                stringify ! ( len ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_Span_ ) ) . coverage as * const _ as
+                usize } , 4usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_Span_ ) , "::" ,
+                stringify ! ( coverage ) ));
 }
 impl Clone for FT_Span_ {
     fn clone(&self) -> Self { *self }
 }
-pub use self::FT_Span_ as FT_Span;
+pub type FT_Span = FT_Span_;
 pub type FT_SpanFunc =
     ::std::option::Option<unsafe extern "C" fn(y: ::std::os::raw::c_int,
                                                count: ::std::os::raw::c_int,
                                                spans: *const FT_Span,
                                                user:
                                                    *mut ::std::os::raw::c_void)>;
 pub type FT_Raster_BitTest_Func =
     ::std::option::Option<unsafe extern "C" fn(y: ::std::os::raw::c_int,
@@ -400,23 +639,70 @@ pub struct FT_Raster_Params_ {
     pub black_spans: FT_SpanFunc,
     pub bit_test: FT_Raster_BitTest_Func,
     pub bit_set: FT_Raster_BitSet_Func,
     pub user: *mut ::std::os::raw::c_void,
     pub clip_box: FT_BBox,
 }
 #[test]
 fn bindgen_test_layout_FT_Raster_Params_() {
-    assert_eq!(::std::mem::size_of::<FT_Raster_Params_>() , 96usize);
-    assert_eq!(::std::mem::align_of::<FT_Raster_Params_>() , 8usize);
+    assert_eq!(::std::mem::size_of::<FT_Raster_Params_>() , 96usize , concat !
+               ( "Size of: " , stringify ! ( FT_Raster_Params_ ) ));
+    assert_eq! (::std::mem::align_of::<FT_Raster_Params_>() , 8usize , concat
+                ! ( "Alignment of " , stringify ! ( FT_Raster_Params_ ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_Raster_Params_ ) ) . target as * const
+                _ as usize } , 0usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_Raster_Params_ ) ,
+                "::" , stringify ! ( target ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_Raster_Params_ ) ) . source as * const
+                _ as usize } , 8usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_Raster_Params_ ) ,
+                "::" , stringify ! ( source ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_Raster_Params_ ) ) . flags as * const
+                _ as usize } , 16usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_Raster_Params_ ) ,
+                "::" , stringify ! ( flags ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_Raster_Params_ ) ) . gray_spans as *
+                const _ as usize } , 24usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_Raster_Params_ ) ,
+                "::" , stringify ! ( gray_spans ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_Raster_Params_ ) ) . black_spans as *
+                const _ as usize } , 32usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_Raster_Params_ ) ,
+                "::" , stringify ! ( black_spans ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_Raster_Params_ ) ) . bit_test as *
+                const _ as usize } , 40usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_Raster_Params_ ) ,
+                "::" , stringify ! ( bit_test ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_Raster_Params_ ) ) . bit_set as *
+                const _ as usize } , 48usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_Raster_Params_ ) ,
+                "::" , stringify ! ( bit_set ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_Raster_Params_ ) ) . user as * const _
+                as usize } , 56usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_Raster_Params_ ) ,
+                "::" , stringify ! ( user ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_Raster_Params_ ) ) . clip_box as *
+                const _ as usize } , 64usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_Raster_Params_ ) ,
+                "::" , stringify ! ( clip_box ) ));
 }
 impl Clone for FT_Raster_Params_ {
     fn clone(&self) -> Self { *self }
 }
-pub use self::FT_Raster_Params_ as FT_Raster_Params;
+pub type FT_Raster_Params = FT_Raster_Params_;
 pub type FT_Raster_NewFunc =
     ::std::option::Option<unsafe extern "C" fn(memory:
                                                    *mut ::std::os::raw::c_void,
                                                raster: *mut FT_Raster)
                               -> ::std::os::raw::c_int>;
 pub type FT_Raster_DoneFunc =
     ::std::option::Option<unsafe extern "C" fn(raster: FT_Raster)>;
 pub type FT_Raster_ResetFunc =
@@ -443,27 +729,59 @@ pub struct FT_Raster_Funcs_ {
     pub raster_new: FT_Raster_NewFunc,
     pub raster_reset: FT_Raster_ResetFunc,
     pub raster_set_mode: FT_Raster_SetModeFunc,
     pub raster_render: FT_Raster_RenderFunc,
     pub raster_done: FT_Raster_DoneFunc,
 }
 #[test]
 fn bindgen_test_layout_FT_Raster_Funcs_() {
-    assert_eq!(::std::mem::size_of::<FT_Raster_Funcs_>() , 48usize);
-    assert_eq!(::std::mem::align_of::<FT_Raster_Funcs_>() , 8usize);
+    assert_eq!(::std::mem::size_of::<FT_Raster_Funcs_>() , 48usize , concat !
+               ( "Size of: " , stringify ! ( FT_Raster_Funcs_ ) ));
+    assert_eq! (::std::mem::align_of::<FT_Raster_Funcs_>() , 8usize , concat !
+                ( "Alignment of " , stringify ! ( FT_Raster_Funcs_ ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_Raster_Funcs_ ) ) . glyph_format as *
+                const _ as usize } , 0usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_Raster_Funcs_ ) ,
+                "::" , stringify ! ( glyph_format ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_Raster_Funcs_ ) ) . raster_new as *
+                const _ as usize } , 8usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_Raster_Funcs_ ) ,
+                "::" , stringify ! ( raster_new ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_Raster_Funcs_ ) ) . raster_reset as *
+                const _ as usize } , 16usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_Raster_Funcs_ ) ,
+                "::" , stringify ! ( raster_reset ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_Raster_Funcs_ ) ) . raster_set_mode as
+                * const _ as usize } , 24usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_Raster_Funcs_ ) ,
+                "::" , stringify ! ( raster_set_mode ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_Raster_Funcs_ ) ) . raster_render as *
+                const _ as usize } , 32usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_Raster_Funcs_ ) ,
+                "::" , stringify ! ( raster_render ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_Raster_Funcs_ ) ) . raster_done as *
+                const _ as usize } , 40usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_Raster_Funcs_ ) ,
+                "::" , stringify ! ( raster_done ) ));
 }
 impl Clone for FT_Raster_Funcs_ {
     fn clone(&self) -> Self { *self }
 }
-pub use self::FT_Raster_Funcs_ as FT_Raster_Funcs;
+pub type FT_Raster_Funcs = FT_Raster_Funcs_;
 pub type FT_Bool = ::std::os::raw::c_uchar;
 pub type FT_FWord = ::std::os::raw::c_short;
 pub type FT_UFWord = ::std::os::raw::c_ushort;
-pub type FT_Char = ::std::os::raw::c_char;
+pub type FT_Char = ::std::os::raw::c_schar;
 pub type FT_Byte = ::std::os::raw::c_uchar;
 pub type FT_Bytes = *const FT_Byte;
 pub type FT_Tag = FT_UInt32;
 pub type FT_String = ::std::os::raw::c_char;
 pub type FT_Short = ::std::os::raw::c_short;
 pub type FT_UShort = ::std::os::raw::c_ushort;
 pub type FT_Int = ::std::os::raw::c_int;
 pub type FT_UInt = ::std::os::raw::c_uint;
@@ -478,324 +796,404 @@ pub type FT_PtrDist = isize;
 #[repr(C)]
 #[derive(Debug, Copy)]
 pub struct FT_UnitVector_ {
     pub x: FT_F2Dot14,
     pub y: FT_F2Dot14,
 }
 #[test]
 fn bindgen_test_layout_FT_UnitVector_() {
-    assert_eq!(::std::mem::size_of::<FT_UnitVector_>() , 4usize);
-    assert_eq!(::std::mem::align_of::<FT_UnitVector_>() , 2usize);
+    assert_eq!(::std::mem::size_of::<FT_UnitVector_>() , 4usize , concat ! (
+               "Size of: " , stringify ! ( FT_UnitVector_ ) ));
+    assert_eq! (::std::mem::align_of::<FT_UnitVector_>() , 2usize , concat ! (
+                "Alignment of " , stringify ! ( FT_UnitVector_ ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_UnitVector_ ) ) . x as * const _ as
+                usize } , 0usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_UnitVector_ ) , "::"
+                , stringify ! ( x ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_UnitVector_ ) ) . y as * const _ as
+                usize } , 2usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_UnitVector_ ) , "::"
+                , stringify ! ( y ) ));
 }
 impl Clone for FT_UnitVector_ {
     fn clone(&self) -> Self { *self }
 }
-pub use self::FT_UnitVector_ as FT_UnitVector;
+pub type FT_UnitVector = FT_UnitVector_;
 #[repr(C)]
 #[derive(Debug, Copy)]
 pub struct FT_Matrix_ {
     pub xx: FT_Fixed,
     pub xy: FT_Fixed,
     pub yx: FT_Fixed,
     pub yy: FT_Fixed,
 }
 #[test]
 fn bindgen_test_layout_FT_Matrix_() {
-    assert_eq!(::std::mem::size_of::<FT_Matrix_>() , 32usize);
-    assert_eq!(::std::mem::align_of::<FT_Matrix_>() , 8usize);
+    assert_eq!(::std::mem::size_of::<FT_Matrix_>() , 32usize , concat ! (
+               "Size of: " , stringify ! ( FT_Matrix_ ) ));
+    assert_eq! (::std::mem::align_of::<FT_Matrix_>() , 8usize , concat ! (
+                "Alignment of " , stringify ! ( FT_Matrix_ ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_Matrix_ ) ) . xx as * const _ as usize
+                } , 0usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_Matrix_ ) , "::" ,
+                stringify ! ( xx ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_Matrix_ ) ) . xy as * const _ as usize
+                } , 8usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_Matrix_ ) , "::" ,
+                stringify ! ( xy ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_Matrix_ ) ) . yx as * const _ as usize
+                } , 16usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_Matrix_ ) , "::" ,
+                stringify ! ( yx ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_Matrix_ ) ) . yy as * const _ as usize
+                } , 24usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_Matrix_ ) , "::" ,
+                stringify ! ( yy ) ));
 }
 impl Clone for FT_Matrix_ {
     fn clone(&self) -> Self { *self }
 }
-pub use self::FT_Matrix_ as FT_Matrix;
+pub type FT_Matrix = FT_Matrix_;
 #[repr(C)]
 #[derive(Debug, Copy)]
 pub struct FT_Data_ {
     pub pointer: *const FT_Byte,
     pub length: FT_Int,
 }
 #[test]
 fn bindgen_test_layout_FT_Data_() {
-    assert_eq!(::std::mem::size_of::<FT_Data_>() , 16usize);
-    assert_eq!(::std::mem::align_of::<FT_Data_>() , 8usize);
+    assert_eq!(::std::mem::size_of::<FT_Data_>() , 16usize , concat ! (
+               "Size of: " , stringify ! ( FT_Data_ ) ));
+    assert_eq! (::std::mem::align_of::<FT_Data_>() , 8usize , concat ! (
+                "Alignment of " , stringify ! ( FT_Data_ ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_Data_ ) ) . pointer as * const _ as
+                usize } , 0usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_Data_ ) , "::" ,
+                stringify ! ( pointer ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_Data_ ) ) . length as * const _ as
+                usize } , 8usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_Data_ ) , "::" ,
+                stringify ! ( length ) ));
 }
 impl Clone for FT_Data_ {
     fn clone(&self) -> Self { *self }
 }
-pub use self::FT_Data_ as FT_Data;
+pub type FT_Data = FT_Data_;
 pub type FT_Generic_Finalizer =
     ::std::option::Option<unsafe extern "C" fn(object:
                                                    *mut ::std::os::raw::c_void)>;
 #[repr(C)]
 #[derive(Debug, Copy)]
 pub struct FT_Generic_ {
     pub data: *mut ::std::os::raw::c_void,
     pub finalizer: FT_Generic_Finalizer,
 }
 #[test]
 fn bindgen_test_layout_FT_Generic_() {
-    assert_eq!(::std::mem::size_of::<FT_Generic_>() , 16usize);
-    assert_eq!(::std::mem::align_of::<FT_Generic_>() , 8usize);
+    assert_eq!(::std::mem::size_of::<FT_Generic_>() , 16usize , concat ! (
+               "Size of: " , stringify ! ( FT_Generic_ ) ));
+    assert_eq! (::std::mem::align_of::<FT_Generic_>() , 8usize , concat ! (
+                "Alignment of " , stringify ! ( FT_Generic_ ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_Generic_ ) ) . data as * const _ as
+                usize } , 0usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_Generic_ ) , "::" ,
+                stringify ! ( data ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_Generic_ ) ) . finalizer as * const _
+                as usize } , 8usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_Generic_ ) , "::" ,
+                stringify ! ( finalizer ) ));
 }
 impl Clone for FT_Generic_ {
     fn clone(&self) -> Self { *self }
 }
-pub use self::FT_Generic_ as FT_Generic;
+pub type FT_Generic = FT_Generic_;
 #[repr(C)]
 #[derive(Debug, Copy)]
 pub struct FT_ListNodeRec_ {
     pub prev: FT_ListNode,
     pub next: FT_ListNode,
     pub data: *mut ::std::os::raw::c_void,
 }
 #[test]
 fn bindgen_test_layout_FT_ListNodeRec_() {
-    assert_eq!(::std::mem::size_of::<FT_ListNodeRec_>() , 24usize);
-    assert_eq!(::std::mem::align_of::<FT_ListNodeRec_>() , 8usize);
+    assert_eq!(::std::mem::size_of::<FT_ListNodeRec_>() , 24usize , concat ! (
+               "Size of: " , stringify ! ( FT_ListNodeRec_ ) ));
+    assert_eq! (::std::mem::align_of::<FT_ListNodeRec_>() , 8usize , concat !
+                ( "Alignment of " , stringify ! ( FT_ListNodeRec_ ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_ListNodeRec_ ) ) . prev as * const _
+                as usize } , 0usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_ListNodeRec_ ) ,
+                "::" , stringify ! ( prev ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_ListNodeRec_ ) ) . next as * const _
+                as usize } , 8usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_ListNodeRec_ ) ,
+                "::" , stringify ! ( next ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_ListNodeRec_ ) ) . data as * const _
+                as usize } , 16usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_ListNodeRec_ ) ,
+                "::" , stringify ! ( data ) ));
 }
 impl Clone for FT_ListNodeRec_ {
     fn clone(&self) -> Self { *self }
 }
 pub type FT_ListNode = *mut FT_ListNodeRec_;
 #[repr(C)]
 #[derive(Debug, Copy)]
 pub struct FT_ListRec_ {
     pub head: FT_ListNode,
     pub tail: FT_ListNode,
 }
 #[test]
 fn bindgen_test_layout_FT_ListRec_() {
-    assert_eq!(::std::mem::size_of::<FT_ListRec_>() , 16usize);
-    assert_eq!(::std::mem::align_of::<FT_ListRec_>() , 8usize);
+    assert_eq!(::std::mem::size_of::<FT_ListRec_>() , 16usize , concat ! (
+               "Size of: " , stringify ! ( FT_ListRec_ ) ));
+    assert_eq! (::std::mem::align_of::<FT_ListRec_>() , 8usize , concat ! (
+                "Alignment of " , stringify ! ( FT_ListRec_ ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_ListRec_ ) ) . head as * const _ as
+                usize } , 0usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_ListRec_ ) , "::" ,
+                stringify ! ( head ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_ListRec_ ) ) . tail as * const _ as
+                usize } , 8usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_ListRec_ ) , "::" ,
+                stringify ! ( tail ) ));
 }
 impl Clone for FT_ListRec_ {
     fn clone(&self) -> Self { *self }
 }
 pub type FT_List = *mut FT_ListRec_;
-pub use self::FT_ListNodeRec_ as FT_ListNodeRec;
-pub use self::FT_ListRec_ as FT_ListRec;
-pub const FT_Mod_Err_Base: _bindgen_ty_19 = _bindgen_ty_19::FT_Mod_Err_Base;
-pub const FT_Mod_Err_Autofit: _bindgen_ty_19 =
-    _bindgen_ty_19::FT_Mod_Err_Base;
-pub const FT_Mod_Err_BDF: _bindgen_ty_19 = _bindgen_ty_19::FT_Mod_Err_Base;
-pub const FT_Mod_Err_Bzip2: _bindgen_ty_19 = _bindgen_ty_19::FT_Mod_Err_Base;
-pub const FT_Mod_Err_Cache: _bindgen_ty_19 = _bindgen_ty_19::FT_Mod_Err_Base;
-pub const FT_Mod_Err_CFF: _bindgen_ty_19 = _bindgen_ty_19::FT_Mod_Err_Base;
-pub const FT_Mod_Err_CID: _bindgen_ty_19 = _bindgen_ty_19::FT_Mod_Err_Base;
-pub const FT_Mod_Err_Gzip: _bindgen_ty_19 = _bindgen_ty_19::FT_Mod_Err_Base;
-pub const FT_Mod_Err_LZW: _bindgen_ty_19 = _bindgen_ty_19::FT_Mod_Err_Base;
-pub const FT_Mod_Err_OTvalid: _bindgen_ty_19 =
-    _bindgen_ty_19::FT_Mod_Err_Base;
-pub const FT_Mod_Err_PCF: _bindgen_ty_19 = _bindgen_ty_19::FT_Mod_Err_Base;
-pub const FT_Mod_Err_PFR: _bindgen_ty_19 = _bindgen_ty_19::FT_Mod_Err_Base;
-pub const FT_Mod_Err_PSaux: _bindgen_ty_19 = _bindgen_ty_19::FT_Mod_Err_Base;
-pub const FT_Mod_Err_PShinter: _bindgen_ty_19 =
-    _bindgen_ty_19::FT_Mod_Err_Base;
-pub const FT_Mod_Err_PSnames: _bindgen_ty_19 =
-    _bindgen_ty_19::FT_Mod_Err_Base;
-pub const FT_Mod_Err_Raster: _bindgen_ty_19 = _bindgen_ty_19::FT_Mod_Err_Base;
-pub const FT_Mod_Err_SFNT: _bindgen_ty_19 = _bindgen_ty_19::FT_Mod_Err_Base;
-pub const FT_Mod_Err_Smooth: _bindgen_ty_19 = _bindgen_ty_19::FT_Mod_Err_Base;
-pub const FT_Mod_Err_TrueType: _bindgen_ty_19 =
-    _bindgen_ty_19::FT_Mod_Err_Base;
-pub const FT_Mod_Err_Type1: _bindgen_ty_19 = _bindgen_ty_19::FT_Mod_Err_Base;
-pub const FT_Mod_Err_Type42: _bindgen_ty_19 = _bindgen_ty_19::FT_Mod_Err_Base;
-pub const FT_Mod_Err_Winfonts: _bindgen_ty_19 =
-    _bindgen_ty_19::FT_Mod_Err_Base;
-pub const FT_Mod_Err_GXvalid: _bindgen_ty_19 =
-    _bindgen_ty_19::FT_Mod_Err_Base;
-pub const FT_Mod_Err_Max: _bindgen_ty_19 = _bindgen_ty_19::FT_Mod_Err_Max;
+pub type FT_ListNodeRec = FT_ListNodeRec_;
+pub type FT_ListRec = FT_ListRec_;
+pub const FT_Mod_Err_Base: _bindgen_ty_1 = _bindgen_ty_1::FT_Mod_Err_Base;
+pub const FT_Mod_Err_Autofit: _bindgen_ty_1 = _bindgen_ty_1::FT_Mod_Err_Base;
+pub const FT_Mod_Err_BDF: _bindgen_ty_1 = _bindgen_ty_1::FT_Mod_Err_Base;
+pub const FT_Mod_Err_Bzip2: _bindgen_ty_1 = _bindgen_ty_1::FT_Mod_Err_Base;
+pub const FT_Mod_Err_Cache: _bindgen_ty_1 = _bindgen_ty_1::FT_Mod_Err_Base;
+pub const FT_Mod_Err_CFF: _bindgen_ty_1 = _bindgen_ty_1::FT_Mod_Err_Base;
+pub const FT_Mod_Err_CID: _bindgen_ty_1 = _bindgen_ty_1::FT_Mod_Err_Base;
+pub const FT_Mod_Err_Gzip: _bindgen_ty_1 = _bindgen_ty_1::FT_Mod_Err_Base;
+pub const FT_Mod_Err_LZW: _bindgen_ty_1 = _bindgen_ty_1::FT_Mod_Err_Base;
+pub const FT_Mod_Err_OTvalid: _bindgen_ty_1 = _bindgen_ty_1::FT_Mod_Err_Base;
+pub const FT_Mod_Err_PCF: _bindgen_ty_1 = _bindgen_ty_1::FT_Mod_Err_Base;
+pub const FT_Mod_Err_PFR: _bindgen_ty_1 = _bindgen_ty_1::FT_Mod_Err_Base;
+pub const FT_Mod_Err_PSaux: _bindgen_ty_1 = _bindgen_ty_1::FT_Mod_Err_Base;
+pub const FT_Mod_Err_PShinter: _bindgen_ty_1 = _bindgen_ty_1::FT_Mod_Err_Base;
+pub const FT_Mod_Err_PSnames: _bindgen_ty_1 = _bindgen_ty_1::FT_Mod_Err_Base;
+pub const FT_Mod_Err_Raster: _bindgen_ty_1 = _bindgen_ty_1::FT_Mod_Err_Base;
+pub const FT_Mod_Err_SFNT: _bindgen_ty_1 = _bindgen_ty_1::FT_Mod_Err_Base;
+pub const FT_Mod_Err_Smooth: _bindgen_ty_1 = _bindgen_ty_1::FT_Mod_Err_Base;
+pub const FT_Mod_Err_TrueType: _bindgen_ty_1 = _bindgen_ty_1::FT_Mod_Err_Base;
+pub const FT_Mod_Err_Type1: _bindgen_ty_1 = _bindgen_ty_1::FT_Mod_Err_Base;
+pub const FT_Mod_Err_Type42: _bindgen_ty_1 = _bindgen_ty_1::FT_Mod_Err_Base;
+pub const FT_Mod_Err_Winfonts: _bindgen_ty_1 = _bindgen_ty_1::FT_Mod_Err_Base;
+pub const FT_Mod_Err_GXvalid: _bindgen_ty_1 = _bindgen_ty_1::FT_Mod_Err_Base;
+pub const FT_Mod_Err_Max: _bindgen_ty_1 = _bindgen_ty_1::FT_Mod_Err_Max;
 #[repr(u32)]
 #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
-pub enum _bindgen_ty_19 { FT_Mod_Err_Base = 0, FT_Mod_Err_Max = 1, }
-pub const FT_Err_Ok: _bindgen_ty_20 = _bindgen_ty_20::FT_Err_Ok;
-pub const FT_Err_Cannot_Open_Resource: _bindgen_ty_20 =
-    _bindgen_ty_20::FT_Err_Cannot_Open_Resource;
-pub const FT_Err_Unknown_File_Format: _bindgen_ty_20 =
-    _bindgen_ty_20::FT_Err_Unknown_File_Format;
-pub const FT_Err_Invalid_File_Format: _bindgen_ty_20 =
-    _bindgen_ty_20::FT_Err_Invalid_File_Format;
-pub const FT_Err_Invalid_Version: _bindgen_ty_20 =
-    _bindgen_ty_20::FT_Err_Invalid_Version;
-pub const FT_Err_Lower_Module_Version: _bindgen_ty_20 =
-    _bindgen_ty_20::FT_Err_Lower_Module_Version;
-pub const FT_Err_Invalid_Argument: _bindgen_ty_20 =
-    _bindgen_ty_20::FT_Err_Invalid_Argument;
-pub const FT_Err_Unimplemented_Feature: _bindgen_ty_20 =
-    _bindgen_ty_20::FT_Err_Unimplemented_Feature;
-pub const FT_Err_Invalid_Table: _bindgen_ty_20 =
-    _bindgen_ty_20::FT_Err_Invalid_Table;
-pub const FT_Err_Invalid_Offset: _bindgen_ty_20 =
-    _bindgen_ty_20::FT_Err_Invalid_Offset;
-pub const FT_Err_Array_Too_Large: _bindgen_ty_20 =
-    _bindgen_ty_20::FT_Err_Array_Too_Large;
-pub const FT_Err_Missing_Module: _bindgen_ty_20 =
-    _bindgen_ty_20::FT_Err_Missing_Module;
-pub const FT_Err_Missing_Property: _bindgen_ty_20 =
-    _bindgen_ty_20::FT_Err_Missing_Property;
-pub const FT_Err_Invalid_Glyph_Index: _bindgen_ty_20 =
-    _bindgen_ty_20::FT_Err_Invalid_Glyph_Index;
-pub const FT_Err_Invalid_Character_Code: _bindgen_ty_20 =
-    _bindgen_ty_20::FT_Err_Invalid_Character_Code;
-pub const FT_Err_Invalid_Glyph_Format: _bindgen_ty_20 =
-    _bindgen_ty_20::FT_Err_Invalid_Glyph_Format;
-pub const FT_Err_Cannot_Render_Glyph: _bindgen_ty_20 =
-    _bindgen_ty_20::FT_Err_Cannot_Render_Glyph;
-pub const FT_Err_Invalid_Outline: _bindgen_ty_20 =
-    _bindgen_ty_20::FT_Err_Invalid_Outline;
-pub const FT_Err_Invalid_Composite: _bindgen_ty_20 =
-    _bindgen_ty_20::FT_Err_Invalid_Composite;
-pub const FT_Err_Too_Many_Hints: _bindgen_ty_20 =
-    _bindgen_ty_20::FT_Err_Too_Many_Hints;
-pub const FT_Err_Invalid_Pixel_Size: _bindgen_ty_20 =
-    _bindgen_ty_20::FT_Err_Invalid_Pixel_Size;
-pub const FT_Err_Invalid_Handle: _bindgen_ty_20 =
-    _bindgen_ty_20::FT_Err_Invalid_Handle;
-pub const FT_Err_Invalid_Library_Handle: _bindgen_ty_20 =
-    _bindgen_ty_20::FT_Err_Invalid_Library_Handle;
-pub const FT_Err_Invalid_Driver_Handle: _bindgen_ty_20 =
-    _bindgen_ty_20::FT_Err_Invalid_Driver_Handle;
-pub const FT_Err_Invalid_Face_Handle: _bindgen_ty_20 =
-    _bindgen_ty_20::FT_Err_Invalid_Face_Handle;
-pub const FT_Err_Invalid_Size_Handle: _bindgen_ty_20 =
-    _bindgen_ty_20::FT_Err_Invalid_Size_Handle;
-pub const FT_Err_Invalid_Slot_Handle: _bindgen_ty_20 =
-    _bindgen_ty_20::FT_Err_Invalid_Slot_Handle;
-pub const FT_Err_Invalid_CharMap_Handle: _bindgen_ty_20 =
-    _bindgen_ty_20::FT_Err_Invalid_CharMap_Handle;
-pub const FT_Err_Invalid_Cache_Handle: _bindgen_ty_20 =
-    _bindgen_ty_20::FT_Err_Invalid_Cache_Handle;
-pub const FT_Err_Invalid_Stream_Handle: _bindgen_ty_20 =
-    _bindgen_ty_20::FT_Err_Invalid_Stream_Handle;
-pub const FT_Err_Too_Many_Drivers: _bindgen_ty_20 =
-    _bindgen_ty_20::FT_Err_Too_Many_Drivers;
-pub const FT_Err_Too_Many_Extensions: _bindgen_ty_20 =
-    _bindgen_ty_20::FT_Err_Too_Many_Extensions;
-pub const FT_Err_Out_Of_Memory: _bindgen_ty_20 =
-    _bindgen_ty_20::FT_Err_Out_Of_Memory;
-pub const FT_Err_Unlisted_Object: _bindgen_ty_20 =
-    _bindgen_ty_20::FT_Err_Unlisted_Object;
-pub const FT_Err_Cannot_Open_Stream: _bindgen_ty_20 =
-    _bindgen_ty_20::FT_Err_Cannot_Open_Stream;
-pub const FT_Err_Invalid_Stream_Seek: _bindgen_ty_20 =
-    _bindgen_ty_20::FT_Err_Invalid_Stream_Seek;
-pub const FT_Err_Invalid_Stream_Skip: _bindgen_ty_20 =
-    _bindgen_ty_20::FT_Err_Invalid_Stream_Skip;
-pub const FT_Err_Invalid_Stream_Read: _bindgen_ty_20 =
-    _bindgen_ty_20::FT_Err_Invalid_Stream_Read;
-pub const FT_Err_Invalid_Stream_Operation: _bindgen_ty_20 =
-    _bindgen_ty_20::FT_Err_Invalid_Stream_Operation;
-pub const FT_Err_Invalid_Frame_Operation: _bindgen_ty_20 =
-    _bindgen_ty_20::FT_Err_Invalid_Frame_Operation;
-pub const FT_Err_Nested_Frame_Access: _bindgen_ty_20 =
-    _bindgen_ty_20::FT_Err_Nested_Frame_Access;
-pub const FT_Err_Invalid_Frame_Read: _bindgen_ty_20 =
-    _bindgen_ty_20::FT_Err_Invalid_Frame_Read;
-pub const FT_Err_Raster_Uninitialized: _bindgen_ty_20 =
-    _bindgen_ty_20::FT_Err_Raster_Uninitialized;
-pub const FT_Err_Raster_Corrupted: _bindgen_ty_20 =
-    _bindgen_ty_20::FT_Err_Raster_Corrupted;
-pub const FT_Err_Raster_Overflow: _bindgen_ty_20 =
-    _bindgen_ty_20::FT_Err_Raster_Overflow;
-pub const FT_Err_Raster_Negative_Height: _bindgen_ty_20 =
-    _bindgen_ty_20::FT_Err_Raster_Negative_Height;
-pub const FT_Err_Too_Many_Caches: _bindgen_ty_20 =
-    _bindgen_ty_20::FT_Err_Too_Many_Caches;
-pub const FT_Err_Invalid_Opcode: _bindgen_ty_20 =
-    _bindgen_ty_20::FT_Err_Invalid_Opcode;
-pub const FT_Err_Too_Few_Arguments: _bindgen_ty_20 =
-    _bindgen_ty_20::FT_Err_Too_Few_Arguments;
-pub const FT_Err_Stack_Overflow: _bindgen_ty_20 =
-    _bindgen_ty_20::FT_Err_Stack_Overflow;
-pub const FT_Err_Code_Overflow: _bindgen_ty_20 =
-    _bindgen_ty_20::FT_Err_Code_Overflow;
-pub const FT_Err_Bad_Argument: _bindgen_ty_20 =
-    _bindgen_ty_20::FT_Err_Bad_Argument;
-pub const FT_Err_Divide_By_Zero: _bindgen_ty_20 =
-    _bindgen_ty_20::FT_Err_Divide_By_Zero;
-pub const FT_Err_Invalid_Reference: _bindgen_ty_20 =
-    _bindgen_ty_20::FT_Err_Invalid_Reference;
-pub const FT_Err_Debug_OpCode: _bindgen_ty_20 =
-    _bindgen_ty_20::FT_Err_Debug_OpCode;
-pub const FT_Err_ENDF_In_Exec_Stream: _bindgen_ty_20 =
-    _bindgen_ty_20::FT_Err_ENDF_In_Exec_Stream;
-pub const FT_Err_Nested_DEFS: _bindgen_ty_20 =
-    _bindgen_ty_20::FT_Err_Nested_DEFS;
-pub const FT_Err_Invalid_CodeRange: _bindgen_ty_20 =
-    _bindgen_ty_20::FT_Err_Invalid_CodeRange;
-pub const FT_Err_Execution_Too_Long: _bindgen_ty_20 =
-    _bindgen_ty_20::FT_Err_Execution_Too_Long;
-pub const FT_Err_Too_Many_Function_Defs: _bindgen_ty_20 =
-    _bindgen_ty_20::FT_Err_Too_Many_Function_Defs;
-pub const FT_Err_Too_Many_Instruction_Defs: _bindgen_ty_20 =
-    _bindgen_ty_20::FT_Err_Too_Many_Instruction_Defs;
-pub const FT_Err_Table_Missing: _bindgen_ty_20 =
-    _bindgen_ty_20::FT_Err_Table_Missing;
-pub const FT_Err_Horiz_Header_Missing: _bindgen_ty_20 =
-    _bindgen_ty_20::FT_Err_Horiz_Header_Missing;
-pub const FT_Err_Locations_Missing: _bindgen_ty_20 =
-    _bindgen_ty_20::FT_Err_Locations_Missing;
-pub const FT_Err_Name_Table_Missing: _bindgen_ty_20 =
-    _bindgen_ty_20::FT_Err_Name_Table_Missing;
-pub const FT_Err_CMap_Table_Missing: _bindgen_ty_20 =
-    _bindgen_ty_20::FT_Err_CMap_Table_Missing;
-pub const FT_Err_Hmtx_Table_Missing: _bindgen_ty_20 =
-    _bindgen_ty_20::FT_Err_Hmtx_Table_Missing;
-pub const FT_Err_Post_Table_Missing: _bindgen_ty_20 =
-    _bindgen_ty_20::FT_Err_Post_Table_Missing;
-pub const FT_Err_Invalid_Horiz_Metrics: _bindgen_ty_20 =
-    _bindgen_ty_20::FT_Err_Invalid_Horiz_Metrics;
-pub const FT_Err_Invalid_CharMap_Format: _bindgen_ty_20 =
-    _bindgen_ty_20::FT_Err_Invalid_CharMap_Format;
-pub const FT_Err_Invalid_PPem: _bindgen_ty_20 =
-    _bindgen_ty_20::FT_Err_Invalid_PPem;
-pub const FT_Err_Invalid_Vert_Metrics: _bindgen_ty_20 =
-    _bindgen_ty_20::FT_Err_Invalid_Vert_Metrics;
-pub const FT_Err_Could_Not_Find_Context: _bindgen_ty_20 =
-    _bindgen_ty_20::FT_Err_Could_Not_Find_Context;
-pub const FT_Err_Invalid_Post_Table_Format: _bindgen_ty_20 =
-    _bindgen_ty_20::FT_Err_Invalid_Post_Table_Format;
-pub const FT_Err_Invalid_Post_Table: _bindgen_ty_20 =
-    _bindgen_ty_20::FT_Err_Invalid_Post_Table;
-pub const FT_Err_Syntax_Error: _bindgen_ty_20 =
-    _bindgen_ty_20::FT_Err_Syntax_Error;
-pub const FT_Err_Stack_Underflow: _bindgen_ty_20 =
-    _bindgen_ty_20::FT_Err_Stack_Underflow;
-pub const FT_Err_Ignore: _bindgen_ty_20 = _bindgen_ty_20::FT_Err_Ignore;
-pub const FT_Err_No_Unicode_Glyph_Name: _bindgen_ty_20 =
-    _bindgen_ty_20::FT_Err_No_Unicode_Glyph_Name;
-pub const FT_Err_Glyph_Too_Big: _bindgen_ty_20 =
-    _bindgen_ty_20::FT_Err_Glyph_Too_Big;
-pub const FT_Err_Missing_Startfont_Field: _bindgen_ty_20 =
-    _bindgen_ty_20::FT_Err_Missing_Startfont_Field;
-pub const FT_Err_Missing_Font_Field: _bindgen_ty_20 =
-    _bindgen_ty_20::FT_Err_Missing_Font_Field;
-pub const FT_Err_Missing_Size_Field: _bindgen_ty_20 =
-    _bindgen_ty_20::FT_Err_Missing_Size_Field;
-pub const FT_Err_Missing_Fontboundingbox_Field: _bindgen_ty_20 =
-    _bindgen_ty_20::FT_Err_Missing_Fontboundingbox_Field;
-pub const FT_Err_Missing_Chars_Field: _bindgen_ty_20 =
-    _bindgen_ty_20::FT_Err_Missing_Chars_Field;
-pub const FT_Err_Missing_Startchar_Field: _bindgen_ty_20 =
-    _bindgen_ty_20::FT_Err_Missing_Startchar_Field;
-pub const FT_Err_Missing_Encoding_Field: _bindgen_ty_20 =
-    _bindgen_ty_20::FT_Err_Missing_Encoding_Field;
-pub const FT_Err_Missing_Bbx_Field: _bindgen_ty_20 =
-    _bindgen_ty_20::FT_Err_Missing_Bbx_Field;
-pub const FT_Err_Bbx_Too_Big: _bindgen_ty_20 =
-    _bindgen_ty_20::FT_Err_Bbx_Too_Big;
-pub const FT_Err_Corrupted_Font_Header: _bindgen_ty_20 =
-    _bindgen_ty_20::FT_Err_Corrupted_Font_Header;
-pub const FT_Err_Corrupted_Font_Glyphs: _bindgen_ty_20 =
-    _bindgen_ty_20::FT_Err_Corrupted_Font_Glyphs;
-pub const FT_Err_Max: _bindgen_ty_20 = _bindgen_ty_20::FT_Err_Max;
+pub enum _bindgen_ty_1 { FT_Mod_Err_Base = 0, FT_Mod_Err_Max = 1, }
+pub const FT_Err_Ok: _bindgen_ty_2 = _bindgen_ty_2::FT_Err_Ok;
+pub const FT_Err_Cannot_Open_Resource: _bindgen_ty_2 =
+    _bindgen_ty_2::FT_Err_Cannot_Open_Resource;
+pub const FT_Err_Unknown_File_Format: _bindgen_ty_2 =
+    _bindgen_ty_2::FT_Err_Unknown_File_Format;
+pub const FT_Err_Invalid_File_Format: _bindgen_ty_2 =
+    _bindgen_ty_2::FT_Err_Invalid_File_Format;
+pub const FT_Err_Invalid_Version: _bindgen_ty_2 =
+    _bindgen_ty_2::FT_Err_Invalid_Version;
+pub const FT_Err_Lower_Module_Version: _bindgen_ty_2 =
+    _bindgen_ty_2::FT_Err_Lower_Module_Version;
+pub const FT_Err_Invalid_Argument: _bindgen_ty_2 =
+    _bindgen_ty_2::FT_Err_Invalid_Argument;
+pub const FT_Err_Unimplemented_Feature: _bindgen_ty_2 =
+    _bindgen_ty_2::FT_Err_Unimplemented_Feature;
+pub const FT_Err_Invalid_Table: _bindgen_ty_2 =
+    _bindgen_ty_2::FT_Err_Invalid_Table;
+pub const FT_Err_Invalid_Offset: _bindgen_ty_2 =
+    _bindgen_ty_2::FT_Err_Invalid_Offset;
+pub const FT_Err_Array_Too_Large: _bindgen_ty_2 =
+    _bindgen_ty_2::FT_Err_Array_Too_Large;
+pub const FT_Err_Missing_Module: _bindgen_ty_2 =
+    _bindgen_ty_2::FT_Err_Missing_Module;
+pub const FT_Err_Missing_Property: _bindgen_ty_2 =
+    _bindgen_ty_2::FT_Err_Missing_Property;
+pub const FT_Err_Invalid_Glyph_Index: _bindgen_ty_2 =
+    _bindgen_ty_2::FT_Err_Invalid_Glyph_Index;
+pub const FT_Err_Invalid_Character_Code: _bindgen_ty_2 =
+    _bindgen_ty_2::FT_Err_Invalid_Character_Code;
+pub const FT_Err_Invalid_Glyph_Format: _bindgen_ty_2 =
+    _bindgen_ty_2::FT_Err_Invalid_Glyph_Format;
+pub const FT_Err_Cannot_Render_Glyph: _bindgen_ty_2 =
+    _bindgen_ty_2::FT_Err_Cannot_Render_Glyph;
+pub const FT_Err_Invalid_Outline: _bindgen_ty_2 =
+    _bindgen_ty_2::FT_Err_Invalid_Outline;
+pub const FT_Err_Invalid_Composite: _bindgen_ty_2 =
+    _bindgen_ty_2::FT_Err_Invalid_Composite;
+pub const FT_Err_Too_Many_Hints: _bindgen_ty_2 =
+    _bindgen_ty_2::FT_Err_Too_Many_Hints;
+pub const FT_Err_Invalid_Pixel_Size: _bindgen_ty_2 =
+    _bindgen_ty_2::FT_Err_Invalid_Pixel_Size;
+pub const FT_Err_Invalid_Handle: _bindgen_ty_2 =
+    _bindgen_ty_2::FT_Err_Invalid_Handle;
+pub const FT_Err_Invalid_Library_Handle: _bindgen_ty_2 =
+    _bindgen_ty_2::FT_Err_Invalid_Library_Handle;
+pub const FT_Err_Invalid_Driver_Handle: _bindgen_ty_2 =
+    _bindgen_ty_2::FT_Err_Invalid_Driver_Handle;
+pub const FT_Err_Invalid_Face_Handle: _bindgen_ty_2 =
+    _bindgen_ty_2::FT_Err_Invalid_Face_Handle;
+pub const FT_Err_Invalid_Size_Handle: _bindgen_ty_2 =
+    _bindgen_ty_2::FT_Err_Invalid_Size_Handle;
+pub const FT_Err_Invalid_Slot_Handle: _bindgen_ty_2 =
+    _bindgen_ty_2::FT_Err_Invalid_Slot_Handle;
+pub const FT_Err_Invalid_CharMap_Handle: _bindgen_ty_2 =
+    _bindgen_ty_2::FT_Err_Invalid_CharMap_Handle;
+pub const FT_Err_Invalid_Cache_Handle: _bindgen_ty_2 =
+    _bindgen_ty_2::FT_Err_Invalid_Cache_Handle;
+pub const FT_Err_Invalid_Stream_Handle: _bindgen_ty_2 =
+    _bindgen_ty_2::FT_Err_Invalid_Stream_Handle;
+pub const FT_Err_Too_Many_Drivers: _bindgen_ty_2 =
+    _bindgen_ty_2::FT_Err_Too_Many_Drivers;
+pub const FT_Err_Too_Many_Extensions: _bindgen_ty_2 =
+    _bindgen_ty_2::FT_Err_Too_Many_Extensions;
+pub const FT_Err_Out_Of_Memory: _bindgen_ty_2 =
+    _bindgen_ty_2::FT_Err_Out_Of_Memory;
+pub const FT_Err_Unlisted_Object: _bindgen_ty_2 =
+    _bindgen_ty_2::FT_Err_Unlisted_Object;
+pub const FT_Err_Cannot_Open_Stream: _bindgen_ty_2 =
+    _bindgen_ty_2::FT_Err_Cannot_Open_Stream;
+pub const FT_Err_Invalid_Stream_Seek: _bindgen_ty_2 =
+    _bindgen_ty_2::FT_Err_Invalid_Stream_Seek;
+pub const FT_Err_Invalid_Stream_Skip: _bindgen_ty_2 =
+    _bindgen_ty_2::FT_Err_Invalid_Stream_Skip;
+pub const FT_Err_Invalid_Stream_Read: _bindgen_ty_2 =
+    _bindgen_ty_2::FT_Err_Invalid_Stream_Read;
+pub const FT_Err_Invalid_Stream_Operation: _bindgen_ty_2 =
+    _bindgen_ty_2::FT_Err_Invalid_Stream_Operation;
+pub const FT_Err_Invalid_Frame_Operation: _bindgen_ty_2 =
+    _bindgen_ty_2::FT_Err_Invalid_Frame_Operation;
+pub const FT_Err_Nested_Frame_Access: _bindgen_ty_2 =
+    _bindgen_ty_2::FT_Err_Nested_Frame_Access;
+pub const FT_Err_Invalid_Frame_Read: _bindgen_ty_2 =
+    _bindgen_ty_2::FT_Err_Invalid_Frame_Read;
+pub const FT_Err_Raster_Uninitialized: _bindgen_ty_2 =
+    _bindgen_ty_2::FT_Err_Raster_Uninitialized;
+pub const FT_Err_Raster_Corrupted: _bindgen_ty_2 =
+    _bindgen_ty_2::FT_Err_Raster_Corrupted;
+pub const FT_Err_Raster_Overflow: _bindgen_ty_2 =
+    _bindgen_ty_2::FT_Err_Raster_Overflow;
+pub const FT_Err_Raster_Negative_Height: _bindgen_ty_2 =
+    _bindgen_ty_2::FT_Err_Raster_Negative_Height;
+pub const FT_Err_Too_Many_Caches: _bindgen_ty_2 =
+    _bindgen_ty_2::FT_Err_Too_Many_Caches;
+pub const FT_Err_Invalid_Opcode: _bindgen_ty_2 =
+    _bindgen_ty_2::FT_Err_Invalid_Opcode;
+pub const FT_Err_Too_Few_Arguments: _bindgen_ty_2 =
+    _bindgen_ty_2::FT_Err_Too_Few_Arguments;
+pub const FT_Err_Stack_Overflow: _bindgen_ty_2 =
+    _bindgen_ty_2::FT_Err_Stack_Overflow;
+pub const FT_Err_Code_Overflow: _bindgen_ty_2 =
+    _bindgen_ty_2::FT_Err_Code_Overflow;
+pub const FT_Err_Bad_Argument: _bindgen_ty_2 =
+    _bindgen_ty_2::FT_Err_Bad_Argument;
+pub const FT_Err_Divide_By_Zero: _bindgen_ty_2 =
+    _bindgen_ty_2::FT_Err_Divide_By_Zero;
+pub const FT_Err_Invalid_Reference: _bindgen_ty_2 =
+    _bindgen_ty_2::FT_Err_Invalid_Reference;
+pub const FT_Err_Debug_OpCode: _bindgen_ty_2 =
+    _bindgen_ty_2::FT_Err_Debug_OpCode;
+pub const FT_Err_ENDF_In_Exec_Stream: _bindgen_ty_2 =
+    _bindgen_ty_2::FT_Err_ENDF_In_Exec_Stream;
+pub const FT_Err_Nested_DEFS: _bindgen_ty_2 =
+    _bindgen_ty_2::FT_Err_Nested_DEFS;
+pub const FT_Err_Invalid_CodeRange: _bindgen_ty_2 =
+    _bindgen_ty_2::FT_Err_Invalid_CodeRange;
+pub const FT_Err_Execution_Too_Long: _bindgen_ty_2 =
+    _bindgen_ty_2::FT_Err_Execution_Too_Long;
+pub const FT_Err_Too_Many_Function_Defs: _bindgen_ty_2 =
+    _bindgen_ty_2::FT_Err_Too_Many_Function_Defs;
+pub const FT_Err_Too_Many_Instruction_Defs: _bindgen_ty_2 =
+    _bindgen_ty_2::FT_Err_Too_Many_Instruction_Defs;
+pub const FT_Err_Table_Missing: _bindgen_ty_2 =
+    _bindgen_ty_2::FT_Err_Table_Missing;
+pub const FT_Err_Horiz_Header_Missing: _bindgen_ty_2 =
+    _bindgen_ty_2::FT_Err_Horiz_Header_Missing;
+pub const FT_Err_Locations_Missing: _bindgen_ty_2 =
+    _bindgen_ty_2::FT_Err_Locations_Missing;
+pub const FT_Err_Name_Table_Missing: _bindgen_ty_2 =
+    _bindgen_ty_2::FT_Err_Name_Table_Missing;
+pub const FT_Err_CMap_Table_Missing: _bindgen_ty_2 =
+    _bindgen_ty_2::FT_Err_CMap_Table_Missing;
+pub const FT_Err_Hmtx_Table_Missing: _bindgen_ty_2 =
+    _bindgen_ty_2::FT_Err_Hmtx_Table_Missing;
+pub const FT_Err_Post_Table_Missing: _bindgen_ty_2 =
+    _bindgen_ty_2::FT_Err_Post_Table_Missing;
+pub const FT_Err_Invalid_Horiz_Metrics: _bindgen_ty_2 =
+    _bindgen_ty_2::FT_Err_Invalid_Horiz_Metrics;
+pub const FT_Err_Invalid_CharMap_Format: _bindgen_ty_2 =
+    _bindgen_ty_2::FT_Err_Invalid_CharMap_Format;
+pub const FT_Err_Invalid_PPem: _bindgen_ty_2 =
+    _bindgen_ty_2::FT_Err_Invalid_PPem;
+pub const FT_Err_Invalid_Vert_Metrics: _bindgen_ty_2 =
+    _bindgen_ty_2::FT_Err_Invalid_Vert_Metrics;
+pub const FT_Err_Could_Not_Find_Context: _bindgen_ty_2 =
+    _bindgen_ty_2::FT_Err_Could_Not_Find_Context;
+pub const FT_Err_Invalid_Post_Table_Format: _bindgen_ty_2 =
+    _bindgen_ty_2::FT_Err_Invalid_Post_Table_Format;
+pub const FT_Err_Invalid_Post_Table: _bindgen_ty_2 =
+    _bindgen_ty_2::FT_Err_Invalid_Post_Table;
+pub const FT_Err_Syntax_Error: _bindgen_ty_2 =
+    _bindgen_ty_2::FT_Err_Syntax_Error;
+pub const FT_Err_Stack_Underflow: _bindgen_ty_2 =
+    _bindgen_ty_2::FT_Err_Stack_Underflow;
+pub const FT_Err_Ignore: _bindgen_ty_2 = _bindgen_ty_2::FT_Err_Ignore;
+pub const FT_Err_No_Unicode_Glyph_Name: _bindgen_ty_2 =
+    _bindgen_ty_2::FT_Err_No_Unicode_Glyph_Name;
+pub const FT_Err_Glyph_Too_Big: _bindgen_ty_2 =
+    _bindgen_ty_2::FT_Err_Glyph_Too_Big;
+pub const FT_Err_Missing_Startfont_Field: _bindgen_ty_2 =
+    _bindgen_ty_2::FT_Err_Missing_Startfont_Field;
+pub const FT_Err_Missing_Font_Field: _bindgen_ty_2 =
+    _bindgen_ty_2::FT_Err_Missing_Font_Field;
+pub const FT_Err_Missing_Size_Field: _bindgen_ty_2 =
+    _bindgen_ty_2::FT_Err_Missing_Size_Field;
+pub const FT_Err_Missing_Fontboundingbox_Field: _bindgen_ty_2 =
+    _bindgen_ty_2::FT_Err_Missing_Fontboundingbox_Field;
+pub const FT_Err_Missing_Chars_Field: _bindgen_ty_2 =
+    _bindgen_ty_2::FT_Err_Missing_Chars_Field;
+pub const FT_Err_Missing_Startchar_Field: _bindgen_ty_2 =
+    _bindgen_ty_2::FT_Err_Missing_Startchar_Field;
+pub const FT_Err_Missing_Encoding_Field: _bindgen_ty_2 =
+    _bindgen_ty_2::FT_Err_Missing_Encoding_Field;
+pub const FT_Err_Missing_Bbx_Field: _bindgen_ty_2 =
+    _bindgen_ty_2::FT_Err_Missing_Bbx_Field;
+pub const FT_Err_Bbx_Too_Big: _bindgen_ty_2 =
+    _bindgen_ty_2::FT_Err_Bbx_Too_Big;
+pub const FT_Err_Corrupted_Font_Header: _bindgen_ty_2 =
+    _bindgen_ty_2::FT_Err_Corrupted_Font_Header;
+pub const FT_Err_Corrupted_Font_Glyphs: _bindgen_ty_2 =
+    _bindgen_ty_2::FT_Err_Corrupted_Font_Glyphs;
+pub const FT_Err_Max: _bindgen_ty_2 = _bindgen_ty_2::FT_Err_Max;
 #[repr(u32)]
 #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
-pub enum _bindgen_ty_20 {
+pub enum _bindgen_ty_2 {
     FT_Err_Ok = 0,
     FT_Err_Cannot_Open_Resource = 1,
     FT_Err_Unknown_File_Format = 2,
     FT_Err_Invalid_File_Format = 3,
     FT_Err_Invalid_Version = 4,
     FT_Err_Lower_Module_Version = 5,
     FT_Err_Invalid_Argument = 6,
     FT_Err_Unimplemented_Feature = 7,
@@ -893,75 +1291,132 @@ pub struct FT_Glyph_Metrics_ {
     pub horiBearingY: FT_Pos,
     pub horiAdvance: FT_Pos,
     pub vertBearingX: FT_Pos,
     pub vertBearingY: FT_Pos,
     pub vertAdvance: FT_Pos,
 }
 #[test]
 fn bindgen_test_layout_FT_Glyph_Metrics_() {
-    assert_eq!(::std::mem::size_of::<FT_Glyph_Metrics_>() , 64usize);
-    assert_eq!(::std::mem::align_of::<FT_Glyph_Metrics_>() , 8usize);
+    assert_eq!(::std::mem::size_of::<FT_Glyph_Metrics_>() , 64usize , concat !
+               ( "Size of: " , stringify ! ( FT_Glyph_Metrics_ ) ));
+    assert_eq! (::std::mem::align_of::<FT_Glyph_Metrics_>() , 8usize , concat
+                ! ( "Alignment of " , stringify ! ( FT_Glyph_Metrics_ ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_Glyph_Metrics_ ) ) . width as * const
+                _ as usize } , 0usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_Glyph_Metrics_ ) ,
+                "::" , stringify ! ( width ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_Glyph_Metrics_ ) ) . height as * const
+                _ as usize } , 8usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_Glyph_Metrics_ ) ,
+                "::" , stringify ! ( height ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_Glyph_Metrics_ ) ) . horiBearingX as *
+                const _ as usize } , 16usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_Glyph_Metrics_ ) ,
+                "::" , stringify ! ( horiBearingX ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_Glyph_Metrics_ ) ) . horiBearingY as *
+                const _ as usize } , 24usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_Glyph_Metrics_ ) ,
+                "::" , stringify ! ( horiBearingY ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_Glyph_Metrics_ ) ) . horiAdvance as *
+                const _ as usize } , 32usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_Glyph_Metrics_ ) ,
+                "::" , stringify ! ( horiAdvance ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_Glyph_Metrics_ ) ) . vertBearingX as *
+                const _ as usize } , 40usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_Glyph_Metrics_ ) ,
+                "::" , stringify ! ( vertBearingX ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_Glyph_Metrics_ ) ) . vertBearingY as *
+                const _ as usize } , 48usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_Glyph_Metrics_ ) ,
+                "::" , stringify ! ( vertBearingY ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_Glyph_Metrics_ ) ) . vertAdvance as *
+                const _ as usize } , 56usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_Glyph_Metrics_ ) ,
+                "::" , stringify ! ( vertAdvance ) ));
 }
 impl Clone for FT_Glyph_Metrics_ {
     fn clone(&self) -> Self { *self }
 }
-pub use self::FT_Glyph_Metrics_ as FT_Glyph_Metrics;
+pub type FT_Glyph_Metrics = FT_Glyph_Metrics_;
 #[repr(C)]
 #[derive(Debug, Copy)]
 pub struct FT_Bitmap_Size_ {
     pub height: FT_Short,
     pub width: FT_Short,
     pub size: FT_Pos,
     pub x_ppem: FT_Pos,
     pub y_ppem: FT_Pos,
 }
 #[test]
 fn bindgen_test_layout_FT_Bitmap_Size_() {
-    assert_eq!(::std::mem::size_of::<FT_Bitmap_Size_>() , 32usize);
-    assert_eq!(::std::mem::align_of::<FT_Bitmap_Size_>() , 8usize);
+    assert_eq!(::std::mem::size_of::<FT_Bitmap_Size_>() , 32usize , concat ! (
+               "Size of: " , stringify ! ( FT_Bitmap_Size_ ) ));
+    assert_eq! (::std::mem::align_of::<FT_Bitmap_Size_>() , 8usize , concat !
+                ( "Alignment of " , stringify ! ( FT_Bitmap_Size_ ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_Bitmap_Size_ ) ) . height as * const _
+                as usize } , 0usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_Bitmap_Size_ ) ,
+                "::" , stringify ! ( height ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_Bitmap_Size_ ) ) . width as * const _
+                as usize } , 2usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_Bitmap_Size_ ) ,
+                "::" , stringify ! ( width ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_Bitmap_Size_ ) ) . size as * const _
+                as usize } , 8usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_Bitmap_Size_ ) ,
+                "::" , stringify ! ( size ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_Bitmap_Size_ ) ) . x_ppem as * const _
+                as usize } , 16usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_Bitmap_Size_ ) ,
+                "::" , stringify ! ( x_ppem ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_Bitmap_Size_ ) ) . y_ppem as * const _
+                as usize } , 24usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_Bitmap_Size_ ) ,
+                "::" , stringify ! ( y_ppem ) ));
 }
 impl Clone for FT_Bitmap_Size_ {
     fn clone(&self) -> Self { *self }
 }
-pub use self::FT_Bitmap_Size_ as FT_Bitmap_Size;
+pub type FT_Bitmap_Size = FT_Bitmap_Size_;
 #[repr(C)]
-#[derive(Debug, Copy)]
+#[derive(Debug, Copy, Clone)]
 pub struct FT_LibraryRec_ {
-    pub _address: u8,
-}
-impl Clone for FT_LibraryRec_ {
-    fn clone(&self) -> Self { *self }
+    _unused: [u8; 0],
 }
 pub type FT_Library = *mut FT_LibraryRec_;
 #[repr(C)]
-#[derive(Debug, Copy)]
+#[derive(Debug, Copy, Clone)]
 pub struct FT_ModuleRec_ {
-    pub _address: u8,
-}
-impl Clone for FT_ModuleRec_ {
-    fn clone(&self) -> Self { *self }
+    _unused: [u8; 0],
 }
 pub type FT_Module = *mut FT_ModuleRec_;
 #[repr(C)]
-#[derive(Debug, Copy)]
+#[derive(Debug, Copy, Clone)]
 pub struct FT_DriverRec_ {
-    pub _address: u8,
-}
-impl Clone for FT_DriverRec_ {
-    fn clone(&self) -> Self { *self }
+    _unused: [u8; 0],
 }
 pub type FT_Driver = *mut FT_DriverRec_;
 #[repr(C)]
-#[derive(Debug, Copy)]
+#[derive(Debug, Copy, Clone)]
 pub struct FT_RendererRec_ {
-    pub _address: u8,
-}
-impl Clone for FT_RendererRec_ {
-    fn clone(&self) -> Self { *self }
+    _unused: [u8; 0],
 }
 pub type FT_Renderer = *mut FT_RendererRec_;
 #[repr(C)]
 #[derive(Debug, Copy)]
 pub struct FT_FaceRec_ {
     pub num_faces: FT_Long,
     pub face_index: FT_Long,
     pub face_flags: FT_Long,
@@ -991,35 +1446,214 @@ pub struct FT_FaceRec_ {
     pub stream: FT_Stream,
     pub sizes_list: FT_ListRec,
     pub autohint: FT_Generic,
     pub extensions: *mut ::std::os::raw::c_void,
     pub internal: FT_Face_Internal,
 }
 #[test]
 fn bindgen_test_layout_FT_FaceRec_() {
-    assert_eq!(::std::mem::size_of::<FT_FaceRec_>() , 248usize);
-    assert_eq!(::std::mem::align_of::<FT_FaceRec_>() , 8usize);
+    assert_eq!(::std::mem::size_of::<FT_FaceRec_>() , 248usize , concat ! (
+               "Size of: " , stringify ! ( FT_FaceRec_ ) ));
+    assert_eq! (::std::mem::align_of::<FT_FaceRec_>() , 8usize , concat ! (
+                "Alignment of " , stringify ! ( FT_FaceRec_ ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_FaceRec_ ) ) . num_faces as * const _
+                as usize } , 0usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_FaceRec_ ) , "::" ,
+                stringify ! ( num_faces ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_FaceRec_ ) ) . face_index as * const _
+                as usize } , 8usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_FaceRec_ ) , "::" ,
+                stringify ! ( face_index ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_FaceRec_ ) ) . face_flags as * const _
+                as usize } , 16usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_FaceRec_ ) , "::" ,
+                stringify ! ( face_flags ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_FaceRec_ ) ) . style_flags as * const
+                _ as usize } , 24usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_FaceRec_ ) , "::" ,
+                stringify ! ( style_flags ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_FaceRec_ ) ) . num_glyphs as * const _
+                as usize } , 32usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_FaceRec_ ) , "::" ,
+                stringify ! ( num_glyphs ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_FaceRec_ ) ) . family_name as * const
+                _ as usize } , 40usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_FaceRec_ ) , "::" ,
+                stringify ! ( family_name ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_FaceRec_ ) ) . style_name as * const _
+                as usize } , 48usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_FaceRec_ ) , "::" ,
+                stringify ! ( style_name ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_FaceRec_ ) ) . num_fixed_sizes as *
+                const _ as usize } , 56usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_FaceRec_ ) , "::" ,
+                stringify ! ( num_fixed_sizes ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_FaceRec_ ) ) . available_sizes as *
+                const _ as usize } , 64usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_FaceRec_ ) , "::" ,
+                stringify ! ( available_sizes ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_FaceRec_ ) ) . num_charmaps as * const
+                _ as usize } , 72usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_FaceRec_ ) , "::" ,
+                stringify ! ( num_charmaps ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_FaceRec_ ) ) . charmaps as * const _
+                as usize } , 80usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_FaceRec_ ) , "::" ,
+                stringify ! ( charmaps ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_FaceRec_ ) ) . generic as * const _ as
+                usize } , 88usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_FaceRec_ ) , "::" ,
+                stringify ! ( generic ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_FaceRec_ ) ) . bbox as * const _ as
+                usize } , 104usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_FaceRec_ ) , "::" ,
+                stringify ! ( bbox ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_FaceRec_ ) ) . units_per_EM as * const
+                _ as usize } , 136usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_FaceRec_ ) , "::" ,
+                stringify ! ( units_per_EM ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_FaceRec_ ) ) . ascender as * const _
+                as usize } , 138usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_FaceRec_ ) , "::" ,
+                stringify ! ( ascender ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_FaceRec_ ) ) . descender as * const _
+                as usize } , 140usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_FaceRec_ ) , "::" ,
+                stringify ! ( descender ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_FaceRec_ ) ) . height as * const _ as
+                usize } , 142usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_FaceRec_ ) , "::" ,
+                stringify ! ( height ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_FaceRec_ ) ) . max_advance_width as *
+                const _ as usize } , 144usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_FaceRec_ ) , "::" ,
+                stringify ! ( max_advance_width ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_FaceRec_ ) ) . max_advance_height as *
+                const _ as usize } , 146usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_FaceRec_ ) , "::" ,
+                stringify ! ( max_advance_height ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_FaceRec_ ) ) . underline_position as *
+                const _ as usize } , 148usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_FaceRec_ ) , "::" ,
+                stringify ! ( underline_position ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_FaceRec_ ) ) . underline_thickness as
+                * const _ as usize } , 150usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_FaceRec_ ) , "::" ,
+                stringify ! ( underline_thickness ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_FaceRec_ ) ) . glyph as * const _ as
+                usize } , 152usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_FaceRec_ ) , "::" ,
+                stringify ! ( glyph ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_FaceRec_ ) ) . size as * const _ as
+                usize } , 160usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_FaceRec_ ) , "::" ,
+                stringify ! ( size ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_FaceRec_ ) ) . charmap as * const _ as
+                usize } , 168usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_FaceRec_ ) , "::" ,
+                stringify ! ( charmap ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_FaceRec_ ) ) . driver as * const _ as
+                usize } , 176usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_FaceRec_ ) , "::" ,
+                stringify ! ( driver ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_FaceRec_ ) ) . memory as * const _ as
+                usize } , 184usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_FaceRec_ ) , "::" ,
+                stringify ! ( memory ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_FaceRec_ ) ) . stream as * const _ as
+                usize } , 192usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_FaceRec_ ) , "::" ,
+                stringify ! ( stream ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_FaceRec_ ) ) . sizes_list as * const _
+                as usize } , 200usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_FaceRec_ ) , "::" ,
+                stringify ! ( sizes_list ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_FaceRec_ ) ) . autohint as * const _
+                as usize } , 216usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_FaceRec_ ) , "::" ,
+                stringify ! ( autohint ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_FaceRec_ ) ) . extensions as * const _
+                as usize } , 232usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_FaceRec_ ) , "::" ,
+                stringify ! ( extensions ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_FaceRec_ ) ) . internal as * const _
+                as usize } , 240usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_FaceRec_ ) , "::" ,
+                stringify ! ( internal ) ));
 }
 impl Clone for FT_FaceRec_ {
     fn clone(&self) -> Self { *self }
 }
 pub type FT_Face = *mut FT_FaceRec_;
 #[repr(C)]
 #[derive(Debug, Copy)]
 pub struct FT_SizeRec_ {
     pub face: FT_Face,
     pub generic: FT_Generic,
     pub metrics: FT_Size_Metrics,
     pub internal: FT_Size_Internal,
 }
 #[test]
 fn bindgen_test_layout_FT_SizeRec_() {
-    assert_eq!(::std::mem::size_of::<FT_SizeRec_>() , 88usize);
-    assert_eq!(::std::mem::align_of::<FT_SizeRec_>() , 8usize);
+    assert_eq!(::std::mem::size_of::<FT_SizeRec_>() , 88usize , concat ! (
+               "Size of: " , stringify ! ( FT_SizeRec_ ) ));
+    assert_eq! (::std::mem::align_of::<FT_SizeRec_>() , 8usize , concat ! (
+                "Alignment of " , stringify ! ( FT_SizeRec_ ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_SizeRec_ ) ) . face as * const _ as
+                usize } , 0usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_SizeRec_ ) , "::" ,
+                stringify ! ( face ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_SizeRec_ ) ) . generic as * const _ as
+                usize } , 8usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_SizeRec_ ) , "::" ,
+                stringify ! ( generic ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_SizeRec_ ) ) . metrics as * const _ as
+                usize } , 24usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_SizeRec_ ) , "::" ,
+                stringify ! ( metrics ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_SizeRec_ ) ) . internal as * const _
+                as usize } , 80usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_SizeRec_ ) , "::" ,
+                stringify ! ( internal ) ));
 }
 impl Clone for FT_SizeRec_ {
     fn clone(&self) -> Self { *self }
 }
 pub type FT_Size = *mut FT_SizeRec_;
 #[repr(C)]
 #[derive(Debug, Copy)]
 pub struct FT_GlyphSlotRec_ {
@@ -1043,35 +1677,169 @@ pub struct FT_GlyphSlotRec_ {
     pub control_len: ::std::os::raw::c_long,
     pub lsb_delta: FT_Pos,
     pub rsb_delta: FT_Pos,
     pub other: *mut ::std::os::raw::c_void,
     pub internal: FT_Slot_Internal,
 }
 #[test]
 fn bindgen_test_layout_FT_GlyphSlotRec_() {
-    assert_eq!(::std::mem::size_of::<FT_GlyphSlotRec_>() , 304usize);
-    assert_eq!(::std::mem::align_of::<FT_GlyphSlotRec_>() , 8usize);
+    assert_eq!(::std::mem::size_of::<FT_GlyphSlotRec_>() , 304usize , concat !
+               ( "Size of: " , stringify ! ( FT_GlyphSlotRec_ ) ));
+    assert_eq! (::std::mem::align_of::<FT_GlyphSlotRec_>() , 8usize , concat !
+                ( "Alignment of " , stringify ! ( FT_GlyphSlotRec_ ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_GlyphSlotRec_ ) ) . library as * const
+                _ as usize } , 0usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_GlyphSlotRec_ ) ,
+                "::" , stringify ! ( library ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_GlyphSlotRec_ ) ) . face as * const _
+                as usize } , 8usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_GlyphSlotRec_ ) ,
+                "::" , stringify ! ( face ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_GlyphSlotRec_ ) ) . next as * const _
+                as usize } , 16usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_GlyphSlotRec_ ) ,
+                "::" , stringify ! ( next ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_GlyphSlotRec_ ) ) . reserved as *
+                const _ as usize } , 24usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_GlyphSlotRec_ ) ,
+                "::" , stringify ! ( reserved ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_GlyphSlotRec_ ) ) . generic as * const
+                _ as usize } , 32usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_GlyphSlotRec_ ) ,
+                "::" , stringify ! ( generic ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_GlyphSlotRec_ ) ) . metrics as * const
+                _ as usize } , 48usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_GlyphSlotRec_ ) ,
+                "::" , stringify ! ( metrics ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_GlyphSlotRec_ ) ) . linearHoriAdvance
+                as * const _ as usize } , 112usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_GlyphSlotRec_ ) ,
+                "::" , stringify ! ( linearHoriAdvance ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_GlyphSlotRec_ ) ) . linearVertAdvance
+                as * const _ as usize } , 120usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_GlyphSlotRec_ ) ,
+                "::" , stringify ! ( linearVertAdvance ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_GlyphSlotRec_ ) ) . advance as * const
+                _ as usize } , 128usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_GlyphSlotRec_ ) ,
+                "::" , stringify ! ( advance ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_GlyphSlotRec_ ) ) . format as * const
+                _ as usize } , 144usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_GlyphSlotRec_ ) ,
+                "::" , stringify ! ( format ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_GlyphSlotRec_ ) ) . bitmap as * const
+                _ as usize } , 152usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_GlyphSlotRec_ ) ,
+                "::" , stringify ! ( bitmap ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_GlyphSlotRec_ ) ) . bitmap_left as *
+                const _ as usize } , 192usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_GlyphSlotRec_ ) ,
+                "::" , stringify ! ( bitmap_left ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_GlyphSlotRec_ ) ) . bitmap_top as *
+                const _ as usize } , 196usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_GlyphSlotRec_ ) ,
+                "::" , stringify ! ( bitmap_top ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_GlyphSlotRec_ ) ) . outline as * const
+                _ as usize } , 200usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_GlyphSlotRec_ ) ,
+                "::" , stringify ! ( outline ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_GlyphSlotRec_ ) ) . num_subglyphs as *
+                const _ as usize } , 240usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_GlyphSlotRec_ ) ,
+                "::" , stringify ! ( num_subglyphs ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_GlyphSlotRec_ ) ) . subglyphs as *
+                const _ as usize } , 248usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_GlyphSlotRec_ ) ,
+                "::" , stringify ! ( subglyphs ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_GlyphSlotRec_ ) ) . control_data as *
+                const _ as usize } , 256usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_GlyphSlotRec_ ) ,
+                "::" , stringify ! ( control_data ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_GlyphSlotRec_ ) ) . control_len as *
+                const _ as usize } , 264usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_GlyphSlotRec_ ) ,
+                "::" , stringify ! ( control_len ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_GlyphSlotRec_ ) ) . lsb_delta as *
+                const _ as usize } , 272usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_GlyphSlotRec_ ) ,
+                "::" , stringify ! ( lsb_delta ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_GlyphSlotRec_ ) ) . rsb_delta as *
+                const _ as usize } , 280usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_GlyphSlotRec_ ) ,
+                "::" , stringify ! ( rsb_delta ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_GlyphSlotRec_ ) ) . other as * const _
+                as usize } , 288usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_GlyphSlotRec_ ) ,
+                "::" , stringify ! ( other ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_GlyphSlotRec_ ) ) . internal as *
+                const _ as usize } , 296usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_GlyphSlotRec_ ) ,
+                "::" , stringify ! ( internal ) ));
 }
 impl Clone for FT_GlyphSlotRec_ {
     fn clone(&self) -> Self { *self }
 }
 pub type FT_GlyphSlot = *mut FT_GlyphSlotRec_;
 #[repr(C)]
 #[derive(Debug, Copy)]
 pub struct FT_CharMapRec_ {
     pub face: FT_Face,
     pub encoding: FT_Encoding,
     pub platform_id: FT_UShort,
     pub encoding_id: FT_UShort,
 }
 #[test]
 fn bindgen_test_layout_FT_CharMapRec_() {
-    assert_eq!(::std::mem::size_of::<FT_CharMapRec_>() , 16usize);
-    assert_eq!(::std::mem::align_of::<FT_CharMapRec_>() , 8usize);
+    assert_eq!(::std::mem::size_of::<FT_CharMapRec_>() , 16usize , concat ! (
+               "Size of: " , stringify ! ( FT_CharMapRec_ ) ));
+    assert_eq! (::std::mem::align_of::<FT_CharMapRec_>() , 8usize , concat ! (
+                "Alignment of " , stringify ! ( FT_CharMapRec_ ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_CharMapRec_ ) ) . face as * const _ as
+                usize } , 0usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_CharMapRec_ ) , "::"
+                , stringify ! ( face ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_CharMapRec_ ) ) . encoding as * const
+                _ as usize } , 8usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_CharMapRec_ ) , "::"
+                , stringify ! ( encoding ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_CharMapRec_ ) ) . platform_id as *
+                const _ as usize } , 12usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_CharMapRec_ ) , "::"
+                , stringify ! ( platform_id ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_CharMapRec_ ) ) . encoding_id as *
+                const _ as usize } , 14usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_CharMapRec_ ) , "::"
+                , stringify ! ( encoding_id ) ));
 }
 impl Clone for FT_CharMapRec_ {
     fn clone(&self) -> Self { *self }
 }
 pub type FT_CharMap = *mut FT_CharMapRec_;
 pub const FT_Encoding__FT_ENCODING_MS_SJIS: FT_Encoding_ =
     FT_Encoding_::FT_ENCODING_SJIS;
 pub const FT_Encoding__FT_ENCODING_MS_GB2312: FT_Encoding_ =
@@ -1096,119 +1864,203 @@ pub enum FT_Encoding_ {
     FT_ENCODING_ADOBE_STANDARD = 1094995778,
     FT_ENCODING_ADOBE_EXPERT = 1094992453,
     FT_ENCODING_ADOBE_CUSTOM = 1094992451,
     FT_ENCODING_ADOBE_LATIN_1 = 1818326065,
     FT_ENCODING_OLD_LATIN_2 = 1818326066,
     FT_ENCODING_APPLE_ROMAN = 1634889070,
 }
 pub use self::FT_Encoding_ as FT_Encoding;
-pub use self::FT_CharMapRec_ as FT_CharMapRec;
+pub type FT_CharMapRec = FT_CharMapRec_;
 #[repr(C)]
-#[derive(Debug, Copy)]
+#[derive(Debug, Copy, Clone)]
 pub struct FT_Face_InternalRec_ {
-    pub _address: u8,
-}
-impl Clone for FT_Face_InternalRec_ {
-    fn clone(&self) -> Self { *self }
+    _unused: [u8; 0],
 }
 pub type FT_Face_Internal = *mut FT_Face_InternalRec_;
-pub use self::FT_FaceRec_ as FT_FaceRec;
+pub type FT_FaceRec = FT_FaceRec_;
 #[repr(C)]
-#[derive(Debug, Copy)]
+#[derive(Debug, Copy, Clone)]
 pub struct FT_Size_InternalRec_ {
-    pub _address: u8,
-}
-impl Clone for FT_Size_InternalRec_ {
-    fn clone(&self) -> Self { *self }
+    _unused: [u8; 0],
 }
 pub type FT_Size_Internal = *mut FT_Size_InternalRec_;
 #[repr(C)]
 #[derive(Debug, Copy)]
 pub struct FT_Size_Metrics_ {
     pub x_ppem: FT_UShort,
     pub y_ppem: FT_UShort,
     pub x_scale: FT_Fixed,
     pub y_scale: FT_Fixed,
     pub ascender: FT_Pos,
     pub descender: FT_Pos,
     pub height: FT_Pos,
     pub max_advance: FT_Pos,
 }
 #[test]
 fn bindgen_test_layout_FT_Size_Metrics_() {
-    assert_eq!(::std::mem::size_of::<FT_Size_Metrics_>() , 56usize);
-    assert_eq!(::std::mem::align_of::<FT_Size_Metrics_>() , 8usize);
+    assert_eq!(::std::mem::size_of::<FT_Size_Metrics_>() , 56usize , concat !
+               ( "Size of: " , stringify ! ( FT_Size_Metrics_ ) ));
+    assert_eq! (::std::mem::align_of::<FT_Size_Metrics_>() , 8usize , concat !
+                ( "Alignment of " , stringify ! ( FT_Size_Metrics_ ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_Size_Metrics_ ) ) . x_ppem as * const
+                _ as usize } , 0usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_Size_Metrics_ ) ,
+                "::" , stringify ! ( x_ppem ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_Size_Metrics_ ) ) . y_ppem as * const
+                _ as usize } , 2usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_Size_Metrics_ ) ,
+                "::" , stringify ! ( y_ppem ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_Size_Metrics_ ) ) . x_scale as * const
+                _ as usize } , 8usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_Size_Metrics_ ) ,
+                "::" , stringify ! ( x_scale ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_Size_Metrics_ ) ) . y_scale as * const
+                _ as usize } , 16usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_Size_Metrics_ ) ,
+                "::" , stringify ! ( y_scale ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_Size_Metrics_ ) ) . ascender as *
+                const _ as usize } , 24usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_Size_Metrics_ ) ,
+                "::" , stringify ! ( ascender ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_Size_Metrics_ ) ) . descender as *
+                const _ as usize } , 32usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_Size_Metrics_ ) ,
+                "::" , stringify ! ( descender ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_Size_Metrics_ ) ) . height as * const
+                _ as usize } , 40usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_Size_Metrics_ ) ,
+                "::" , stringify ! ( height ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_Size_Metrics_ ) ) . max_advance as *
+                const _ as usize } , 48usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_Size_Metrics_ ) ,
+                "::" , stringify ! ( max_advance ) ));
 }
 impl Clone for FT_Size_Metrics_ {
     fn clone(&self) -> Self { *self }
 }
-pub use self::FT_Size_Metrics_ as FT_Size_Metrics;
-pub use self::FT_SizeRec_ as FT_SizeRec;
+pub type FT_Size_Metrics = FT_Size_Metrics_;
+pub type FT_SizeRec = FT_SizeRec_;
 #[repr(C)]
-#[derive(Debug, Copy)]
+#[derive(Debug, Copy, Clone)]
 pub struct FT_SubGlyphRec_ {
-    pub _address: u8,
-}
-impl Clone for FT_SubGlyphRec_ {
-    fn clone(&self) -> Self { *self }
+    _unused: [u8; 0],
 }
 pub type FT_SubGlyph = *mut FT_SubGlyphRec_;
 #[repr(C)]
-#[derive(Debug, Copy)]
+#[derive(Debug, Copy, Clone)]
 pub struct FT_Slot_InternalRec_ {
-    pub _address: u8,
-}
-impl Clone for FT_Slot_InternalRec_ {
-    fn clone(&self) -> Self { *self }
+    _unused: [u8; 0],
 }
 pub type FT_Slot_Internal = *mut FT_Slot_InternalRec_;
-pub use self::FT_GlyphSlotRec_ as FT_GlyphSlotRec;
+pub type FT_GlyphSlotRec = FT_GlyphSlotRec_;
 extern "C" {
     pub fn FT_Init_FreeType(alibrary: *mut FT_Library) -> FT_Error;
 }
 extern "C" {
     pub fn FT_Done_FreeType(library: FT_Library) -> FT_Error;
 }
 #[repr(C)]
 #[derive(Debug, Copy)]
 pub struct FT_Parameter_ {
     pub tag: FT_ULong,
     pub data: FT_Pointer,
 }
 #[test]
 fn bindgen_test_layout_FT_Parameter_() {
-    assert_eq!(::std::mem::size_of::<FT_Parameter_>() , 16usize);
-    assert_eq!(::std::mem::align_of::<FT_Parameter_>() , 8usize);
+    assert_eq!(::std::mem::size_of::<FT_Parameter_>() , 16usize , concat ! (
+               "Size of: " , stringify ! ( FT_Parameter_ ) ));
+    assert_eq! (::std::mem::align_of::<FT_Parameter_>() , 8usize , concat ! (
+                "Alignment of " , stringify ! ( FT_Parameter_ ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_Parameter_ ) ) . tag as * const _ as
+                usize } , 0usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_Parameter_ ) , "::"
+                , stringify ! ( tag ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_Parameter_ ) ) . data as * const _ as
+                usize } , 8usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_Parameter_ ) , "::"
+                , stringify ! ( data ) ));
 }
 impl Clone for FT_Parameter_ {
     fn clone(&self) -> Self { *self }
 }
-pub use self::FT_Parameter_ as FT_Parameter;
+pub type FT_Parameter = FT_Parameter_;
 #[repr(C)]
 #[derive(Debug, Copy)]
 pub struct FT_Open_Args_ {
     pub flags: FT_UInt,
     pub memory_base: *const FT_Byte,
     pub memory_size: FT_Long,
     pub pathname: *mut FT_String,
     pub stream: FT_Stream,
     pub driver: FT_Module,
     pub num_params: FT_Int,
     pub params: *mut FT_Parameter,
 }
 #[test]
 fn bindgen_test_layout_FT_Open_Args_() {
-    assert_eq!(::std::mem::size_of::<FT_Open_Args_>() , 64usize);
-    assert_eq!(::std::mem::align_of::<FT_Open_Args_>() , 8usize);
+    assert_eq!(::std::mem::size_of::<FT_Open_Args_>() , 64usize , concat ! (
+               "Size of: " , stringify ! ( FT_Open_Args_ ) ));
+    assert_eq! (::std::mem::align_of::<FT_Open_Args_>() , 8usize , concat ! (
+                "Alignment of " , stringify ! ( FT_Open_Args_ ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_Open_Args_ ) ) . flags as * const _ as
+                usize } , 0usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_Open_Args_ ) , "::"
+                , stringify ! ( flags ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_Open_Args_ ) ) . memory_base as *
+                const _ as usize } , 8usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_Open_Args_ ) , "::"
+                , stringify ! ( memory_base ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_Open_Args_ ) ) . memory_size as *
+                const _ as usize } , 16usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_Open_Args_ ) , "::"
+                , stringify ! ( memory_size ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_Open_Args_ ) ) . pathname as * const _
+                as usize } , 24usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_Open_Args_ ) , "::"
+                , stringify ! ( pathname ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_Open_Args_ ) ) . stream as * const _
+                as usize } , 32usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_Open_Args_ ) , "::"
+                , stringify ! ( stream ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_Open_Args_ ) ) . driver as * const _
+                as usize } , 40usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_Open_Args_ ) , "::"
+                , stringify ! ( driver ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_Open_Args_ ) ) . num_params as * const
+                _ as usize } , 48usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_Open_Args_ ) , "::"
+                , stringify ! ( num_params ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_Open_Args_ ) ) . params as * const _
+                as usize } , 56usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_Open_Args_ ) , "::"
+                , stringify ! ( params ) ));
 }
 impl Clone for FT_Open_Args_ {
     fn clone(&self) -> Self { *self }
 }
-pub use self::FT_Open_Args_ as FT_Open_Args;
+pub type FT_Open_Args = FT_Open_Args_;
 extern "C" {
     pub fn FT_New_Face(library: FT_Library,
                        filepathname: *const ::std::os::raw::c_char,
                        face_index: FT_Long, aface: *mut FT_Face) -> FT_Error;
 }
 extern "C" {
     pub fn FT_New_Memory_Face(library: FT_Library, file_base: *const FT_Byte,
                               file_size: FT_Long, face_index: FT_Long,
@@ -1253,23 +2105,51 @@ pub struct FT_Size_RequestRec_ {
     pub type_: FT_Size_Request_Type,
     pub width: FT_Long,
     pub height: FT_Long,
     pub horiResolution: FT_UInt,
     pub vertResolution: FT_UInt,
 }
 #[test]
 fn bindgen_test_layout_FT_Size_RequestRec_() {
-    assert_eq!(::std::mem::size_of::<FT_Size_RequestRec_>() , 32usize);
-    assert_eq!(::std::mem::align_of::<FT_Size_RequestRec_>() , 8usize);
+    assert_eq!(::std::mem::size_of::<FT_Size_RequestRec_>() , 32usize , concat
+               ! ( "Size of: " , stringify ! ( FT_Size_RequestRec_ ) ));
+    assert_eq! (::std::mem::align_of::<FT_Size_RequestRec_>() , 8usize ,
+                concat ! (
+                "Alignment of " , stringify ! ( FT_Size_RequestRec_ ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_Size_RequestRec_ ) ) . type_ as *
+                const _ as usize } , 0usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_Size_RequestRec_ ) ,
+                "::" , stringify ! ( type_ ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_Size_RequestRec_ ) ) . width as *
+                const _ as usize } , 8usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_Size_RequestRec_ ) ,
+                "::" , stringify ! ( width ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_Size_RequestRec_ ) ) . height as *
+                const _ as usize } , 16usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_Size_RequestRec_ ) ,
+                "::" , stringify ! ( height ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_Size_RequestRec_ ) ) . horiResolution
+                as * const _ as usize } , 24usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_Size_RequestRec_ ) ,
+                "::" , stringify ! ( horiResolution ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_Size_RequestRec_ ) ) . vertResolution
+                as * const _ as usize } , 28usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_Size_RequestRec_ ) ,
+                "::" , stringify ! ( vertResolution ) ));
 }
 impl Clone for FT_Size_RequestRec_ {
     fn clone(&self) -> Self { *self }
 }
-pub use self::FT_Size_RequestRec_ as FT_Size_RequestRec;
+pub type FT_Size_RequestRec = FT_Size_RequestRec_;
 pub type FT_Size_Request = *mut FT_Size_RequestRec_;
 extern "C" {
     pub fn FT_Request_Size(face: FT_Face, req: FT_Size_Request) -> FT_Error;
 }
 extern "C" {
     pub fn FT_Set_Char_Size(face: FT_Face, char_width: FT_F26Dot6,
                             char_height: FT_F26Dot6, horz_resolution: FT_UInt,
                             vert_resolution: FT_UInt) -> FT_Error;
@@ -1470,46 +2350,93 @@ extern "C" {
     pub fn FT_Get_CMap_Language_ID(charmap: FT_CharMap) -> FT_ULong;
 }
 extern "C" {
     pub fn FT_Get_CMap_Format(charmap: FT_CharMap) -> FT_Long;
 }
 pub type FT_Module_Interface = FT_Pointer;
 pub type FT_Module_Constructor =
     ::std::option::Option<unsafe extern "C" fn(module: FT_Module)
-                              -> ::std::os::raw::c_int>;
+                              -> FT_Error>;
 pub type FT_Module_Destructor =
     ::std::option::Option<unsafe extern "C" fn(module: FT_Module)>;
 pub type FT_Module_Requester =
     ::std::option::Option<unsafe extern "C" fn(module: FT_Module,
                                                name:
                                                    *const ::std::os::raw::c_char)
-                              -> *mut ::std::os::raw::c_void>;
+                              -> FT_Module_Interface>;
 #[repr(C)]
 #[derive(Debug, Copy)]
 pub struct FT_Module_Class_ {
     pub module_flags: FT_ULong,
     pub module_size: FT_Long,
     pub module_name: *const FT_String,
     pub module_version: FT_Fixed,
     pub module_requires: FT_Fixed,
     pub module_interface: *const ::std::os::raw::c_void,
     pub module_init: FT_Module_Constructor,
     pub module_done: FT_Module_Destructor,
     pub get_interface: FT_Module_Requester,
 }
 #[test]
 fn bindgen_test_layout_FT_Module_Class_() {
-    assert_eq!(::std::mem::size_of::<FT_Module_Class_>() , 72usize);
-    assert_eq!(::std::mem::align_of::<FT_Module_Class_>() , 8usize);
+    assert_eq!(::std::mem::size_of::<FT_Module_Class_>() , 72usize , concat !
+               ( "Size of: " , stringify ! ( FT_Module_Class_ ) ));
+    assert_eq! (::std::mem::align_of::<FT_Module_Class_>() , 8usize , concat !
+                ( "Alignment of " , stringify ! ( FT_Module_Class_ ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_Module_Class_ ) ) . module_flags as *
+                const _ as usize } , 0usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_Module_Class_ ) ,
+                "::" , stringify ! ( module_flags ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_Module_Class_ ) ) . module_size as *
+                const _ as usize } , 8usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_Module_Class_ ) ,
+                "::" , stringify ! ( module_size ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_Module_Class_ ) ) . module_name as *
+                const _ as usize } , 16usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_Module_Class_ ) ,
+                "::" , stringify ! ( module_name ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_Module_Class_ ) ) . module_version as
+                * const _ as usize } , 24usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_Module_Class_ ) ,
+                "::" , stringify ! ( module_version ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_Module_Class_ ) ) . module_requires as
+                * const _ as usize } , 32usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_Module_Class_ ) ,
+                "::" , stringify ! ( module_requires ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_Module_Class_ ) ) . module_interface
+                as * const _ as usize } , 40usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_Module_Class_ ) ,
+                "::" , stringify ! ( module_interface ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_Module_Class_ ) ) . module_init as *
+                const _ as usize } , 48usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_Module_Class_ ) ,
+                "::" , stringify ! ( module_init ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_Module_Class_ ) ) . module_done as *
+                const _ as usize } , 56usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_Module_Class_ ) ,
+                "::" , stringify ! ( module_done ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const FT_Module_Class_ ) ) . get_interface as *
+                const _ as usize } , 64usize , concat ! (
+                "Alignment of field: " , stringify ! ( FT_Module_Class_ ) ,
+                "::" , stringify ! ( get_interface ) ));
 }
 impl Clone for FT_Module_Class_ {
     fn clone(&self) -> Self { *self }
 }
-pub use self::FT_Module_Class_ as FT_Module_Class;
+pub type FT_Module_Class = FT_Module_Class_;
 extern "C" {
     pub fn FT_Add_Module(library: FT_Library, clazz: *const FT_Module_Class)
      -> FT_Error;
 }
 extern "C" {
     pub fn FT_Get_Module(library: FT_Library,
                          module_name: *const ::std::os::raw::c_char)
      -> FT_Module;
@@ -1555,8 +2482,87 @@ pub enum FT_TrueTypeEngineType_ {
     FT_TRUETYPE_ENGINE_TYPE_UNPATENTED = 1,
     FT_TRUETYPE_ENGINE_TYPE_PATENTED = 2,
 }
 pub use self::FT_TrueTypeEngineType_ as FT_TrueTypeEngineType;
 extern "C" {
     pub fn FT_Get_TrueType_Engine_Type(library: FT_Library)
      -> FT_TrueTypeEngineType;
 }
+extern "C" {
+    pub fn FT_Outline_Decompose(outline: *mut FT_Outline,
+                                func_interface: *const FT_Outline_Funcs,
+                                user: *mut ::std::os::raw::c_void)
+     -> FT_Error;
+}
+extern "C" {
+    pub fn FT_Outline_New(library: FT_Library, numPoints: FT_UInt,
+                          numContours: FT_Int, anoutline: *mut FT_Outline)
+     -> FT_Error;
+}
+extern "C" {
+    pub fn FT_Outline_New_Internal(memory: FT_Memory, numPoints: FT_UInt,
+                                   numContours: FT_Int,
+                                   anoutline: *mut FT_Outline) -> FT_Error;
+}
+extern "C" {
+    pub fn FT_Outline_Done(library: FT_Library, outline: *mut FT_Outline)
+     -> FT_Error;
+}
+extern "C" {
+    pub fn FT_Outline_Done_Internal(memory: FT_Memory,
+                                    outline: *mut FT_Outline) -> FT_Error;
+}
+extern "C" {
+    pub fn FT_Outline_Check(outline: *mut FT_Outline) -> FT_Error;
+}
+extern "C" {
+    pub fn FT_Outline_Get_CBox(outline: *const FT_Outline,
+                               acbox: *mut FT_BBox);
+}
+extern "C" {
+    pub fn FT_Outline_Translate(outline: *const FT_Outline, xOffset: FT_Pos,
+                                yOffset: FT_Pos);
+}
+extern "C" {
+    pub fn FT_Outline_Copy(source: *const FT_Outline, target: *mut FT_Outline)
+     -> FT_Error;
+}
+extern "C" {
+    pub fn FT_Outline_Transform(outline: *const FT_Outline,
+                                matrix: *const FT_Matrix);
+}
+extern "C" {
+    pub fn FT_Outline_Embolden(outline: *mut FT_Outline, strength: FT_Pos)
+     -> FT_Error;
+}
+extern "C" {
+    pub fn FT_Outline_EmboldenXY(outline: *mut FT_Outline, xstrength: FT_Pos,
+                                 ystrength: FT_Pos) -> FT_Error;
+}
+extern "C" {
+    pub fn FT_Outline_Reverse(outline: *mut FT_Outline);
+}
+extern "C" {
+    pub fn FT_Outline_Get_Bitmap(library: FT_Library,
+                                 outline: *mut FT_Outline,
+                                 abitmap: *const FT_Bitmap) -> FT_Error;
+}
+extern "C" {
+    pub fn FT_Outline_Render(library: FT_Library, outline: *mut FT_Outline,
+                             params: *mut FT_Raster_Params) -> FT_Error;
+}
+pub const FT_Orientation__FT_ORIENTATION_FILL_RIGHT: FT_Orientation_ =
+    FT_Orientation_::FT_ORIENTATION_TRUETYPE;
+pub const FT_Orientation__FT_ORIENTATION_FILL_LEFT: FT_Orientation_ =
+    FT_Orientation_::FT_ORIENTATION_POSTSCRIPT;
+#[repr(u32)]
+#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
+pub enum FT_Orientation_ {
+    FT_ORIENTATION_TRUETYPE = 0,
+    FT_ORIENTATION_POSTSCRIPT = 1,
+    FT_ORIENTATION_NONE = 2,
+}
+pub use self::FT_Orientation_ as FT_Orientation;
+extern "C" {
+    pub fn FT_Outline_Get_Orientation(outline: *mut FT_Outline)
+     -> FT_Orientation;
+}
new file mode 100644
--- /dev/null
+++ b/third_party/rust/fxhash/.cargo-checksum.json
@@ -0,0 +1,1 @@
+{"files":{".cargo-ok":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","Cargo.toml":"83bb4c3e7fbfb7380c175923ba7dfe150e4e09bd4ebfb45e65e5f8a494d36ab9","README.md":"7b9227f966b312e221bd372fef79438b2446a21241eb7542520eac29bfbc10d0","bench.rs":"b4dc3ef9eeb043ffb470b37a0c2a36306a024af808eac8517924359298d3e183","lib.rs":"885b72a1c977dc1c3ff4e0652719e62b6d8c3e713403e571afd581283f72df7b"},"package":"c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c"}
\ No newline at end of file
new file mode 100644
new file mode 100644
--- /dev/null
+++ b/third_party/rust/fxhash/Cargo.toml
@@ -0,0 +1,38 @@
+# THIS FILE IS AUTOMATICALLY GENERATED BY CARGO
+#
+# When uploading crates to the registry Cargo will automatically
+# "normalize" Cargo.toml files for maximal compatibility
+# with all versions of Cargo and also rewrite `path` dependencies
+# to registry (e.g. crates.io) dependencies
+#
+# If you believe there's an error in this file please file an
+# issue against the rust-lang/cargo repository. If you're
+# editing this file be aware that the upstream Cargo.toml
+# will likely look very different (and much more reasonable)
+
+[package]
+name = "fxhash"
+version = "0.2.1"
+authors = ["cbreeden <github@u.breeden.cc>"]
+description = "A fast, non-secure, hashing algorithm derived from an internal hasher used in FireFox and Rustc."
+documentation = "https://docs.rs/fxhash"
+readme = "README.md"
+keywords = ["hash"]
+categories = ["algorithms"]
+license = "Apache-2.0/MIT"
+repository = "https://github.com/cbreeden/fxhash"
+
+[lib]
+name = "fxhash"
+path = "lib.rs"
+
+[[bench]]
+name = "fxhash"
+path = "bench.rs"
+[dependencies.byteorder]
+version = "1.0.0"
+[dev-dependencies.seahash]
+version = "3.0.5"
+
+[dev-dependencies.fnv]
+version = "1.0.5"
new file mode 100644
--- /dev/null
+++ b/third_party/rust/fxhash/README.md
@@ -0,0 +1,62 @@
+# Fx Hash
+
+This hashing algorithm was extracted from the Rustc compiler.  This is the same hashing algoirthm used for some internal operations in FireFox.  The strength of this algorithm is in hashing 8 bytes at a time on 64-bit platforms, where the FNV algorithm works on one byte at a time.
+
+## Disclaimer
+
+It is **not a cryptographically secure** hash, so it is strongly recommended that you do not use this hash for cryptographic purproses.  Furthermore, this hashing algorithm was not designed to prevent any attacks for determining collisions which could be used to potentially cause quadratic behavior in `HashMap`s.  So it is not recommended to expose this hash in places where collissions or DDOS attacks may be a concern.
+
+## Examples
+
+Building an Fx backed hashmap.
+
+```rust
+extern crate fxhash;
+use fxhash::FxHashMap;
+
+let mut hashmap = FxHashMap::new();
+
+hashmap.insert("black", 0);
+hashmap.insert("white", 255);
+```
+
+Building an Fx backed hashset.
+
+```rust
+extern crate fxhash;
+use fxhash::FxHashSet;
+
+let mut hashmap = FxHashSet::new();
+
+hashmap.insert("black");
+hashmap.insert("white");
+```
+
+## Benchmarks
+
+Generally `fxhash` is than `fnv` on `u32`, `u64`, or any byte sequence with length >= 5.  However, keep in mind that hashing speed is not the only characteristic worth considering.  That being said, Rustc had an observable increase in speed when switching from `fnv` backed hashmaps to `fx` based hashmaps.
+
+    bench_fnv_003     ... bench:      3 ns/iter (+/- 0)
+    bench_fnv_004     ... bench:      2 ns/iter (+/- 0)
+    bench_fnv_011     ... bench:      6 ns/iter (+/- 1)
+    bench_fnv_012     ... bench:      5 ns/iter (+/- 1)
+    bench_fnv_023     ... bench:     14 ns/iter (+/- 3)
+    bench_fnv_024     ... bench:     14 ns/iter (+/- 4)
+    bench_fnv_068     ... bench:     57 ns/iter (+/- 11)
+    bench_fnv_132     ... bench:    145 ns/iter (+/- 30)
+    bench_fx_003      ... bench:      4 ns/iter (+/- 0)
+    bench_fx_004      ... bench:      3 ns/iter (+/- 1)
+    bench_fx_011      ... bench:      5 ns/iter (+/- 2)
+    bench_fx_012      ... bench:      4 ns/iter (+/- 1)
+    bench_fx_023      ... bench:      7 ns/iter (+/- 3)
+    bench_fx_024      ... bench:      4 ns/iter (+/- 1)
+    bench_fx_068      ... bench:     10 ns/iter (+/- 3)
+    bench_fx_132      ... bench:     19 ns/iter (+/- 5)
+    bench_seahash_003 ... bench:     30 ns/iter (+/- 12)
+    bench_seahash_004 ... bench:     32 ns/iter (+/- 22)
+    bench_seahash_011 ... bench:     30 ns/iter (+/- 4)
+    bench_seahash_012 ... bench:     31 ns/iter (+/- 1)
+    bench_seahash_023 ... bench:     32 ns/iter (+/- 6)
+    bench_seahash_024 ... bench:     31 ns/iter (+/- 5)
+    bench_seahash_068 ... bench:     40 ns/iter (+/- 9)
+    bench_seahash_132 ... bench:     50 ns/iter (+/- 12)
\ No newline at end of file
new file mode 100644
--- /dev/null
+++ b/third_party/rust/fxhash/bench.rs
@@ -0,0 +1,78 @@
+#![feature(test)]
+extern crate test;
+extern crate fnv;
+extern crate fxhash;
+extern crate seahash;
+
+use std::hash::{Hash, Hasher};
+use test::{Bencher, black_box};
+
+
+fn fnvhash<H: Hash>(b: H) -> u64 {
+    let mut hasher = fnv::FnvHasher::default();
+    b.hash(&mut hasher);
+    hasher.finish()
+}
+
+fn seahash<H: Hash>(b: H) -> u64 {
+    let mut hasher = seahash::SeaHasher::default();
+    b.hash(&mut hasher);
+    hasher.finish()
+}
+
+macro_rules! generate_benches {
+    ($($fx:ident, $fx32:ident, $fx64:ident, $fnv:ident, $sea:ident, $s:expr),* $(,)*) => (
+        $(
+            #[bench]
+            fn $fx(b: &mut Bencher) {
+                let s = black_box($s);
+                b.iter(|| {
+                    fxhash::hash(&s)
+                })
+            }
+
+            #[bench]
+            fn $fx32(b: &mut Bencher) {
+                let s = black_box($s);
+                b.iter(|| {
+                    fxhash::hash32(&s)
+                })
+            }
+
+            #[bench]
+            fn $fx64(b: &mut Bencher) {
+                let s = black_box($s);
+                b.iter(|| {
+                    fxhash::hash64(&s)
+                })
+            }
+
+            #[bench]
+            fn $fnv(b: &mut Bencher) {
+                let s = black_box($s);
+                b.iter(|| {
+                    fnvhash(&s)
+                })
+            }
+
+            #[bench]
+            fn $sea(b: &mut Bencher) {
+                let s = black_box($s);
+                b.iter(|| {
+                    seahash(&s)
+                })
+            }
+        )*
+    )
+}
+
+generate_benches!(
+    bench_fx_003, bench_fx32_003, bench_fx64_003, bench_fnv_003, bench_seahash_003, "123",
+    bench_fx_004, bench_fx32_004, bench_fx64_004, bench_fnv_004, bench_seahash_004, "1234",
+    bench_fx_011, bench_fx32_011, bench_fx64_011, bench_fnv_011, bench_seahash_011, "12345678901",
+    bench_fx_012, bench_fx32_012, bench_fx64_012, bench_fnv_012, bench_seahash_012, "123456789012",
+    bench_fx_023, bench_fx32_023, bench_fx64_023, bench_fnv_023, bench_seahash_023, "12345678901234567890123",
+    bench_fx_024, bench_fx32_024, bench_fx64_024, bench_fnv_024, bench_seahash_024, "123456789012345678901234",
+    bench_fx_068, bench_fx32_068, bench_fx64_068, bench_fnv_068, bench_seahash_068, "11234567890123456789012345678901234567890123456789012345678901234567",
+    bench_fx_132, bench_fx32_132, bench_fx64_132, bench_fnv_132, bench_seahash_132, "112345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901",
+);
\ No newline at end of file
new file mode 100644
--- /dev/null
+++ b/third_party/rust/fxhash/lib.rs
@@ -0,0 +1,324 @@
+// Copyright 2015 The Rust Project Developers. See the COPYRIGHT
+// file at the top-level directory of this distribution and at
+// http://rust-lang.org/COPYRIGHT.
+//
+// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
+// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
+// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
+// option. This file may not be copied, modified, or distributed
+// except according to those terms.
+
+#![deny(missing_docs)]
+
+//! # Fx Hash
+//!
+//! This hashing algorithm was extracted from the Rustc compiler.  This is the same hashing
+//! algoirthm used for some internal operations in FireFox.  The strength of this algorithm
+//! is in hashing 8 bytes at a time on 64-bit platforms, where the FNV algorithm works on one
+//! byte at a time.
+//!
+//! ## Disclaimer
+//!
+//! It is **not a cryptographically secure** hash, so it is strongly recommended that you do
+//! not use this hash for cryptographic purproses.  Furthermore, this hashing algorithm was
+//! not designed to prevent any attacks for determining collisions which could be used to
+//! potentially cause quadratic behavior in `HashMap`s.  So it is not recommended to expose
+//! this hash in places where collissions or DDOS attacks may be a concern.
+
+use std::collections::{HashMap, HashSet};
+use std::default::Default;
+use std::hash::{Hasher, Hash, BuildHasherDefault};
+use std::ops::BitXor;
+
+extern crate byteorder;
+use byteorder::{ByteOrder, NativeEndian};
+
+/// A builder for default Fx hashers.
+pub type FxBuildHasher = BuildHasherDefault<FxHasher>;
+
+/// A `HashMap` using a default Fx hasher.
+pub type FxHashMap<K, V> = HashMap<K, V, FxBuildHasher>;
+
+/// A `HashSet` using a default Fx hasher.
+pub type FxHashSet<V> = HashSet<V, FxBuildHasher>;
+
+const ROTATE: u32 = 5;
+const SEED64: u64 = 0x517cc1b727220a95;
+const SEED32: u32 = (SEED64 & 0xFFFF_FFFF) as u32;
+
+#[cfg(target_pointer_width = "32")]
+const SEED: usize = SEED32 as usize;
+#[cfg(target_pointer_width = "64")]
+const SEED: usize = SEED64 as usize;
+
+trait HashWord {
+    fn hash_word(&mut self, Self);
+}
+
+macro_rules! impl_hash_word {
+    ($($ty:ty = $key:ident),* $(,)*) => (
+        $(
+            impl HashWord for $ty {
+                #[inline]
+                fn hash_word(&mut self, word: Self) {
+                    *self = self.rotate_left(ROTATE).bitxor(word).wrapping_mul($key);
+                }
+            }
+        )*
+    )
+}
+
+impl_hash_word!(usize = SEED, u32 = SEED32, u64 = SEED64);
+
+#[inline]
+fn write32(mut hash: u32, mut bytes: &[u8]) -> u32 {
+    while bytes.len() >= 4 {
+        let n = NativeEndian::read_u32(bytes);
+        hash.hash_word(n);
+        bytes = bytes.split_at(4).1;
+    }
+
+    for byte in bytes {
+        hash.hash_word(*byte as u32);
+    }
+    hash
+}
+
+#[inline]
+fn write64(mut hash: u64, mut bytes: &[u8]) -> u64 {
+    while bytes.len() >= 8 {
+        let n = NativeEndian::read_u64(bytes);
+        hash.hash_word(n);
+        bytes = bytes.split_at(8).1;
+    }
+
+    if bytes.len() >= 4 {
+        let n = NativeEndian::read_u32(bytes);
+        hash.hash_word(n as u64);
+        bytes = bytes.split_at(4).1;
+    }
+
+    for byte in bytes {
+        hash.hash_word(*byte as u64);
+    }
+    hash
+}
+
+#[inline]
+#[cfg(target_pointer_width = "32")]
+fn write(hash: usize, bytes: &[u8]) -> usize {
+    write32(hash as u32, bytes) as usize
+}
+
+#[inline]
+#[cfg(target_pointer_width = "64")]
+fn write(hash: usize, bytes: &[u8]) -> usize {
+    write64(hash as u64, bytes) as usize
+}
+
+/// This hashing algorithm was extracted from the Rustc compiler.
+/// This is the same hashing algoirthm used for some internal operations in FireFox.
+/// The strength of this algorithm is in hashing 8 bytes at a time on 64-bit platforms,
+/// where the FNV algorithm works on one byte at a time.
+///
+/// This hashing algorithm should not be used for cryptographic, or in scenarios where
+/// DOS attacks are a concern.
+#[derive(Debug, Clone)]
+pub struct FxHasher {
+    hash: usize,
+}
+
+impl Default for FxHasher {
+    #[inline]
+    fn default() -> FxHasher {
+        FxHasher { hash: 0 }
+    }
+}
+
+impl Hasher for FxHasher {
+    #[inline]
+    fn write(&mut self, bytes: &[u8]) {
+        self.hash = write(self.hash, bytes);
+    }
+
+    #[inline]
+    fn write_u8(&mut self, i: u8) {
+        self.hash.hash_word(i as usize);
+    }
+
+    #[inline]
+    fn write_u16(&mut self, i: u16) {
+        self.hash.hash_word(i as usize);
+    }
+
+    #[inline]
+    fn write_u32(&mut self, i: u32) {
+        self.hash.hash_word(i as usize);
+    }
+
+    #[inline]
+    #[cfg(target_pointer_width = "32")]
+    fn write_u64(&mut self, i: u64) {
+        self.hash.hash_word(i as usize);
+        self.hash.hash_word((i >> 32) as usize);
+    }
+
+    #[inline]
+    #[cfg(target_pointer_width = "64")]
+    fn write_u64(&mut self, i: u64) {
+        self.hash.hash_word(i as usize);
+    }
+
+    #[inline]
+    fn write_usize(&mut self, i: usize) {
+        self.hash.hash_word(i);
+    }
+
+    #[inline]
+    fn finish(&self) -> u64 {
+        self.hash as u64
+    }
+}
+
+/// This hashing algorithm was extracted from the Rustc compiler.
+/// This is the same hashing algoirthm used for some internal operations in FireFox.
+/// The strength of this algorithm is in hashing 8 bytes at a time on any platform,
+/// where the FNV algorithm works on one byte at a time.
+///
+/// This hashing algorithm should not be used for cryptographic, or in scenarios where
+/// DOS attacks are a concern.
+#[derive(Debug, Clone)]
+pub struct FxHasher64 {
+    hash: u64,
+}
+
+impl Default for FxHasher64 {
+    #[inline]
+    fn default() -> FxHasher64 {
+        FxHasher64 { hash: 0 }
+    }
+}
+
+impl Hasher for FxHasher64 {
+    #[inline]
+    fn write(&mut self, bytes: &[u8]) {
+        self.hash = write64(self.hash, bytes);
+    }
+
+    #[inline]
+    fn write_u8(&mut self, i: u8) {
+        self.hash.hash_word(i as u64);
+    }
+
+    #[inline]
+    fn write_u16(&mut self, i: u16) {
+        self.hash.hash_word(i as u64);
+    }
+
+    #[inline]
+    fn write_u32(&mut self, i: u32) {
+        self.hash.hash_word(i as u64);
+    }
+
+    fn write_u64(&mut self, i: u64) {
+        self.hash.hash_word(i);
+    }
+
+    #[inline]
+    fn write_usize(&mut self, i: usize) {
+        self.hash.hash_word(i as u64);
+    }
+
+    #[inline]
+    fn finish(&self) -> u64 {
+        self.hash
+    }
+}
+
+/// This hashing algorithm was extracted from the Rustc compiler.
+/// This is the same hashing algoirthm used for some internal operations in FireFox.
+/// The strength of this algorithm is in hashing 4 bytes at a time on any platform,
+/// where the FNV algorithm works on one byte at a time.
+///
+/// This hashing algorithm should not be used for cryptographic, or in scenarios where
+/// DOS attacks are a concern.
+#[derive(Debug, Clone)]
+pub struct FxHasher32 {
+    hash: u32,
+}
+
+impl Default for FxHasher32 {
+    #[inline]
+    fn default() -> FxHasher32 {
+        FxHasher32 { hash: 0 }
+    }
+}
+
+impl Hasher for FxHasher32 {
+    #[inline]
+    fn write(&mut self, bytes: &[u8]) {
+        self.hash = write32(self.hash, bytes);
+    }
+
+    #[inline]
+    fn write_u8(&mut self, i: u8) {
+        self.hash.hash_word(i as u32);
+    }
+
+    #[inline]
+    fn write_u16(&mut self, i: u16) {
+        self.hash.hash_word(i as u32);
+    }
+
+    #[inline]
+    fn write_u32(&mut self, i: u32) {
+        self.hash.hash_word(i);
+    }
+
+    #[inline]
+    fn write_u64(&mut self, i: u64) {
+        self.hash.hash_word(i as u32);
+        self.hash.hash_word((i >> 32) as u32);
+    }
+
+    #[inline]
+    #[cfg(target_pointer_width = "32")]
+    fn write_usize(&mut self, i: usize) {
+        self.write_u32(i as u32);
+    }
+
+    #[inline]
+    #[cfg(target_pointer_width = "64")]
+    fn write_usize(&mut self, i: usize) {
+        self.write_u64(i as u64);
+    }
+
+    #[inline]
+    fn finish(&self) -> u64 {
+        self.hash as u64
+    }
+}
+
+/// A convenience function for when you need a quick 64-bit hash.
+#[inline]
+pub fn hash64<T: Hash + ?Sized>(v: &T) -> u64 {
+    let mut state = FxHasher64::default();
+    v.hash(&mut state);
+    state.finish()
+}
+
+/// A convenience function for when you need a quick 32-bit hash.
+#[inline]
+pub fn hash32<T: Hash + ?Sized>(v: &T) -> u32 {
+    let mut state = FxHasher32::default();
+    v.hash(&mut state);
+    state.finish() as u32
+}
+
+/// A convenience function for when you need a quick usize hash.
+#[inline]
+pub fn hash<T: Hash + ?Sized>(v: &T) -> usize {
+    let mut state = FxHasher::default();
+    v.hash(&mut state);
+    state.finish() as usize
+}
\ No newline at end of file
deleted file mode 100644
--- a/third_party/rust/heapsize-0.3.8/.cargo-checksum.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"files":{".cargo-ok":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",".travis.yml":"1108708721703f4562646e1e7c6f6c924fa997835714bcc6a3ff8a58382134f1","Cargo.toml":"723e5918946fdb518ed1ad3e03ae9104b980cbe85bbee1989dc4197570ba6d73","README.md":"9a38b16bccde5db28c34d79134f02d2cdcbbab224b9a68ace93c5b85b5ef38f2","appveyor.yml":"130e820ab60abf8d08f3a91d4b0158e6a581c180385e12850113adb362eb158c","build.rs":"e13e88ed285a829256d3c6987563a663c37e335457d090125a3e19b1a97fec8e","src/lib.rs":"ab4e0a2e6d0ac700df5dbb7a2c83542cb82c94d4e46c632a4114fec93d6aba0a","tests/tests.rs":"f642da7b54b6cde55cf25fe84b2e6b27356d26b351d42a38e944b93e0c1fa24f"},"package":"5a376f7402b85be6e0ba504243ecbc0709c48019ecc6286d0540c2e359050c88"}
\ No newline at end of file
deleted file mode 100644
deleted file mode 100644
--- a/third_party/rust/heapsize-0.3.8/.travis.yml
+++ /dev/null
@@ -1,19 +0,0 @@
-language: rust
-rust:
- - 1.8.0
- - nightly
- - beta
- - stable
-
-os:
-  - linux
-  - osx
-
-notifications:
-  webhooks: http://build.servo.org:54856/travis
-
-script:
- - cargo test
- - "[ $TRAVIS_RUST_VERSION != nightly ] || cargo test --features unstable"
- - "[ $TRAVIS_RUST_VERSION != nightly ] || cargo test --manifest-path derive/Cargo.toml"
-
deleted file mode 100644
--- a/third_party/rust/heapsize-0.3.8/Cargo.toml
+++ /dev/null
@@ -1,14 +0,0 @@
-[package]
-name = "heapsize"
-version = "0.3.8"
-authors = [ "The Servo Project Developers" ]
-description = "Infrastructure for measuring the total runtime size of an object on the heap"
-license = "MPL-2.0"
-repository = "https://github.com/servo/heapsize"
-build = "build.rs"
-
-[target.'cfg(windows)'.dependencies]
-kernel32-sys = "0.2.1"
-
-[features]
-unstable = []
deleted file mode 100644
--- a/third_party/rust/heapsize-0.3.8/README.md
+++ /dev/null
@@ -1,5 +0,0 @@
-# heapsize
-
-In support of measuring heap allocations in Rust programs.
-
-[API Documentation](https://doc.servo.org/heapsize/)
deleted file mode 100644
--- a/third_party/rust/heapsize-0.3.8/appveyor.yml
+++ /dev/null
@@ -1,23 +0,0 @@
-environment:
-  matrix:
-  - FEATURES: ""
-  - FEATURES: "unstable"
-
-platform:
-  - i686-pc-windows-gnu
-  - i686-pc-windows-msvc
-  - x86_64-pc-windows-gnu
-  - x86_64-pc-windows-msvc
-
-install:
-  - ps: Start-FileDownload "https://static.rust-lang.org/dist/rust-nightly-${env:PLATFORM}.exe"
-  - rust-nightly-%PLATFORM%.exe /VERYSILENT /NORESTART /DIR="C:\Program Files (x86)\Rust"
-  - SET PATH=%PATH%;C:\Program Files (x86)\Rust\bin
-  - rustc -V
-  - cargo -V
-
-build_script:
-  - cargo build --verbose --features "%FEATURES%"
-
-test_script:
-  - cargo test --verbose --features "%FEATURES%"
deleted file mode 100644
--- a/third_party/rust/heapsize-0.3.8/build.rs
+++ /dev/null
@@ -1,37 +0,0 @@
-use std::env::var;
-use std::process::Command;
-use std::str;
-
-fn main() {
-    let verbose = Command::new(var("RUSTC").unwrap_or("rustc".into()))
-        .arg("--version")
-        .arg("--verbose")
-        .output()
-        .unwrap()
-        .stdout;
-    let verbose = str::from_utf8(&verbose).unwrap();
-    let mut commit_date = None;
-    let mut release = None;
-    for line in verbose.lines() {
-        let mut parts = line.split(':');
-        match parts.next().unwrap().trim() {
-            "commit-date" => commit_date = Some(parts.next().unwrap().trim()),
-            "release" => release = Some(parts.next().unwrap().trim()),
-            _ => {}
-        }
-    }
-    let version = release.unwrap().split('-').next().unwrap();;
-    let mut version_components = version.split('.').map(|s| s.parse::<u32>().unwrap());
-    let version = (
-        version_components.next().unwrap(),
-        version_components.next().unwrap(),
-        version_components.next().unwrap(),
-        // "unknown" sorts after "2016-02-14", which is what we want to defaut to unprefixed
-        // https://github.com/servo/heapsize/pull/44#issuecomment-187935883
-        commit_date.unwrap()
-    );
-    assert_eq!(version_components.next(), None);
-    if version < (1, 8, 0, "2016-02-14") {
-        println!("cargo:rustc-cfg=prefixed_jemalloc");
-    }
-}
deleted file mode 100644
--- a/third_party/rust/heapsize-0.3.8/src/lib.rs
+++ /dev/null
@@ -1,323 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-//! Data structure measurement.
-
-#[cfg(target_os = "windows")]
-extern crate kernel32;
-
-#[cfg(target_os = "windows")]
-use kernel32::{GetProcessHeap, HeapSize, HeapValidate};
-use std::borrow::Cow;
-use std::cell::{Cell, RefCell};
-use std::collections::{BTreeMap, HashSet, HashMap, LinkedList, VecDeque};
-use std::hash::BuildHasher;
-use std::hash::Hash;
-use std::marker::PhantomData;
-use std::mem::size_of;
-use std::net::{Ipv4Addr, Ipv6Addr};
-use std::os::raw::c_void;
-use std::sync::Arc;
-use std::sync::atomic::{AtomicBool, AtomicIsize, AtomicUsize};
-use std::rc::Rc;
-
-/// Get the size of a heap block.
-///
-/// Ideally Rust would expose a function like this in std::rt::heap.
-///
-/// `unsafe` because the caller must ensure that the pointer is from jemalloc.
-/// FIXME: This probably interacts badly with custom allocators:
-/// https://doc.rust-lang.org/book/custom-allocators.html
-pub unsafe fn heap_size_of(ptr: *const c_void) -> usize {
-    if ptr == 0x01 as *const c_void {
-        0
-    } else {
-        heap_size_of_impl(ptr)
-    }
-}
-
-#[cfg(not(target_os = "windows"))]
-unsafe fn heap_size_of_impl(ptr: *const c_void) -> usize {
-    // The C prototype is `je_malloc_usable_size(JEMALLOC_USABLE_SIZE_CONST void *ptr)`. On some
-    // platforms `JEMALLOC_USABLE_SIZE_CONST` is `const` and on some it is empty. But in practice
-    // this function doesn't modify the contents of the block that `ptr` points to, so we use
-    // `*const c_void` here.
-    extern "C" {
-		#[cfg_attr(any(prefixed_jemalloc, target_os = "macos", target_os = "android"), link_name = "je_malloc_usable_size")]
-        fn malloc_usable_size(ptr: *const c_void) -> usize;
-    }
-    malloc_usable_size(ptr)
-}
-
-#[cfg(target_os = "windows")]
-pub unsafe fn heap_size_of_impl(mut ptr: *const c_void) -> usize {
-    let heap = GetProcessHeap();
-
-    if HeapValidate(heap, 0, ptr) == 0 {
-        ptr = *(ptr as *const *const c_void).offset(-1);
-    }
-
-    HeapSize(heap, 0, ptr) as usize
-}
-
-// The simplest trait for measuring the size of heap data structures. More complex traits that
-// return multiple measurements -- e.g. measure text separately from images -- are also possible,
-// and should be used when appropriate.
-//
-pub trait HeapSizeOf {
-    /// Measure the size of any heap-allocated structures that hang off this value, but not the
-    /// space taken up by the value itself (i.e. what size_of::<T> measures, more or less); that
-    /// space is handled by the implementation of HeapSizeOf for Box<T> below.
-    fn heap_size_of_children(&self) -> usize;
-}
-
-// There are two possible ways to measure the size of `self` when it's on the heap: compute it
-// (with `::std::rt::heap::usable_size(::std::mem::size_of::<T>(), 0)`) or measure it directly
-// using the heap allocator (with `heap_size_of`). We do the latter, for the following reasons.
-//
-// * The heap allocator is the true authority for the sizes of heap blocks; its measurement is
-//   guaranteed to be correct. In comparison, size computations are error-prone. (For example, the
-//   `rt::heap::usable_size` function used in some of Rust's non-default allocator implementations
-//   underestimate the true usable size of heap blocks, which is safe in general but would cause
-//   under-measurement here.)
-//
-// * If we measure something that isn't a heap block, we'll get a crash. This keeps us honest,
-//   which is important because unsafe code is involved and this can be gotten wrong.
-//
-// However, in the best case, the two approaches should give the same results.
-//
-impl<T: HeapSizeOf + ?Sized> HeapSizeOf for Box<T> {
-    fn heap_size_of_children(&self) -> usize {
-        // Measure size of `self`.
-        unsafe {
-            heap_size_of(&**self as *const T as *const c_void) + (**self).heap_size_of_children()
-        }
-    }
-}
-
-impl<T: HeapSizeOf> HeapSizeOf for [T] {
-    fn heap_size_of_children(&self) -> usize {
-        self.iter().fold(0, |size, item| size + item.heap_size_of_children())
-    }
-}
-
-impl HeapSizeOf for String {
-    fn heap_size_of_children(&self) -> usize {
-        unsafe {
-            heap_size_of(self.as_ptr() as *const c_void)
-        }
-    }
-}
-
-impl<'a, T: ?Sized> HeapSizeOf for &'a T {
-    fn heap_size_of_children(&self) -> usize {
-        0
-    }
-}
-
-impl<T: HeapSizeOf> HeapSizeOf for Option<T> {
-    fn heap_size_of_children(&self) -> usize {
-        match *self {
-            None => 0,
-            Some(ref x) => x.heap_size_of_children()
-        }
-    }
-}
-
-impl<T: HeapSizeOf, E: HeapSizeOf> HeapSizeOf for Result<T, E> {
-    fn heap_size_of_children(&self) -> usize {
-        match *self {
-            Ok(ref x) => x.heap_size_of_children(),
-            Err(ref e) => e.heap_size_of_children(),
-        }
-    }
-}
-
-impl<'a, B: ?Sized + ToOwned> HeapSizeOf for Cow<'a, B> where B::Owned: HeapSizeOf {
-    fn heap_size_of_children(&self) -> usize {
-        match *self {
-            Cow::Borrowed(_) => 0,
-            Cow::Owned(ref b) => b.heap_size_of_children(),
-        }
-    }
-}
-
-impl HeapSizeOf for () {
-    fn heap_size_of_children(&self) -> usize {
-        0
-    }
-}
-
-impl<T1, T2> HeapSizeOf for (T1, T2)
-    where T1: HeapSizeOf, T2 :HeapSizeOf
-{
-    fn heap_size_of_children(&self) -> usize {
-        self.0.heap_size_of_children() +
-            self.1.heap_size_of_children()
-    }
-}
-
-impl<T1, T2, T3> HeapSizeOf for (T1, T2, T3)
-    where T1: HeapSizeOf, T2 :HeapSizeOf, T3: HeapSizeOf
-{
-    fn heap_size_of_children(&self) -> usize {
-        self.0.heap_size_of_children() +
-            self.1.heap_size_of_children() +
-            self.2.heap_size_of_children()
-    }
-}
-
-impl<T1, T2, T3, T4> HeapSizeOf for (T1, T2, T3, T4)
-    where T1: HeapSizeOf, T2 :HeapSizeOf, T3: HeapSizeOf, T4: HeapSizeOf
-{
-    fn heap_size_of_children(&self) -> usize {
-        self.0.heap_size_of_children() +
-            self.1.heap_size_of_children() +
-            self.2.heap_size_of_children() +
-            self.3.heap_size_of_children()
-  }
-}
-
-impl<T1, T2, T3, T4, T5> HeapSizeOf for (T1, T2, T3, T4, T5)
-    where T1: HeapSizeOf, T2 :HeapSizeOf, T3: HeapSizeOf, T4: HeapSizeOf, T5: HeapSizeOf
-{
-    fn heap_size_of_children(&self) -> usize {
-        self.0.heap_size_of_children() +
-            self.1.heap_size_of_children() +
-            self.2.heap_size_of_children() +
-            self.3.heap_size_of_children() +
-            self.4.heap_size_of_children()
-  }
-}
-
-impl<T: HeapSizeOf> HeapSizeOf for Arc<T> {
-    fn heap_size_of_children(&self) -> usize {
-        (**self).heap_size_of_children()
-    }
-}
-
-impl<T: HeapSizeOf> HeapSizeOf for RefCell<T> {
-    fn heap_size_of_children(&self) -> usize {
-        self.borrow().heap_size_of_children()
-    }
-}
-
-impl<T: HeapSizeOf + Copy> HeapSizeOf for Cell<T> {
-    fn heap_size_of_children(&self) -> usize {
-        self.get().heap_size_of_children()
-    }
-}
-
-impl<T: HeapSizeOf> HeapSizeOf for Vec<T> {
-    fn heap_size_of_children(&self) -> usize {
-        self.iter().fold(
-            unsafe { heap_size_of(self.as_ptr() as *const c_void) },
-            |n, elem| n + elem.heap_size_of_children())
-    }
-}
-
-impl<T: HeapSizeOf> HeapSizeOf for VecDeque<T> {
-    fn heap_size_of_children(&self) -> usize {
-        self.iter().fold(
-            // FIXME: get the buffer pointer for heap_size_of(), capacity() is a lower bound:
-            self.capacity() * size_of::<T>(),
-            |n, elem| n + elem.heap_size_of_children())
-    }
-}
-
-impl<T> HeapSizeOf for Vec<Rc<T>> {
-    fn heap_size_of_children(&self) -> usize {
-        // The fate of measuring Rc<T> is still undecided, but we still want to measure
-        // the space used for storing them.
-        unsafe {
-            heap_size_of(self.as_ptr() as *const c_void)
-        }
-    }
-}
-
-impl<T: HeapSizeOf, S> HeapSizeOf for HashSet<T, S>
-    where T: Eq + Hash, S: BuildHasher {
-    fn heap_size_of_children(&self) -> usize {
-        //TODO(#6908) measure actual bucket memory usage instead of approximating
-        let size = self.capacity() * (size_of::<T>() + size_of::<usize>());
-        self.iter().fold(size, |n, value| {
-            n + value.heap_size_of_children()
-        })
-    }
-}
-
-impl<K: HeapSizeOf, V: HeapSizeOf, S> HeapSizeOf for HashMap<K, V, S>
-    where K: Eq + Hash, S: BuildHasher {
-    fn heap_size_of_children(&self) -> usize {
-        //TODO(#6908) measure actual bucket memory usage instead of approximating
-        let size = self.capacity() * (size_of::<V>() + size_of::<K>() + size_of::<usize>());
-        self.iter().fold(size, |n, (key, value)| {
-            n + key.heap_size_of_children() + value.heap_size_of_children()
-        })
-    }
-}
-
-// PhantomData is always 0.
-impl<T> HeapSizeOf for PhantomData<T> {
-    fn heap_size_of_children(&self) -> usize {
-        0
-    }
-}
-
-// A linked list has an overhead of two words per item.
-impl<T: HeapSizeOf> HeapSizeOf for LinkedList<T> {
-    fn heap_size_of_children(&self) -> usize {
-        let mut size = 0;
-        for item in self {
-            size += 2 * size_of::<usize>() + size_of::<T>() + item.heap_size_of_children();
-        }
-        size
-    }
-}
-
-// FIXME: Overhead for the BTreeMap nodes is not accounted for.
-impl<K: HeapSizeOf, V: HeapSizeOf> HeapSizeOf for BTreeMap<K, V> {
-    fn heap_size_of_children(&self) -> usize {
-        let mut size = 0;
-        for (key, value) in self.iter() {
-            size += size_of::<(K, V)>() +
-                    key.heap_size_of_children() +
-                    value.heap_size_of_children();
-        }
-        size
-    }
-}
-
-/// For use on types defined in external crates
-/// with known heap sizes.
-#[macro_export]
-macro_rules! known_heap_size(
-    ($size:expr, $($ty:ty),+) => (
-        $(
-            impl $crate::HeapSizeOf for $ty {
-                #[inline(always)]
-                fn heap_size_of_children(&self) -> usize {
-                    $size
-                }
-            }
-        )+
-    );
-    ($size: expr, $($ty:ident<$($gen:ident),+>),+) => (
-        $(
-        impl<$($gen: $crate::HeapSizeOf),+> $crate::HeapSizeOf for $ty<$($gen),+> {
-            #[inline(always)]
-            fn heap_size_of_children(&self) -> usize {
-                $size
-            }
-        }
-        )+
-    );
-);
-
-known_heap_size!(0, char, str);
-known_heap_size!(0, u8, u16, u32, u64, usize);
-known_heap_size!(0, i8, i16, i32, i64, isize);
-known_heap_size!(0, bool, f32, f64);
-known_heap_size!(0, AtomicBool, AtomicIsize, AtomicUsize);
-known_heap_size!(0, Ipv4Addr, Ipv6Addr);
deleted file mode 100644
--- a/third_party/rust/heapsize-0.3.8/tests/tests.rs
+++ /dev/null
@@ -1,171 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#![cfg_attr(feature= "unstable", feature(alloc, heap_api, repr_simd))]
-
-extern crate heapsize;
-
-use heapsize::{HeapSizeOf, heap_size_of};
-use std::os::raw::c_void;
-
-pub const EMPTY: *mut () = 0x1 as *mut ();
-
-#[cfg(feature = "unstable")]
-mod unstable {
-    extern crate alloc;
-
-    use heapsize::{HeapSizeOf, heap_size_of};
-    use std::os::raw::c_void;
-
-    #[repr(C, simd)]
-    struct OverAligned(u64, u64, u64, u64);
-
-    #[test]
-    fn check_empty() {
-        assert_eq!(::EMPTY, alloc::heap::EMPTY);
-    }
-
-    #[cfg(not(target_os = "windows"))]
-    #[test]
-    fn test_alloc() {
-        unsafe {
-            // A 64 byte request is allocated exactly.
-            let x = alloc::heap::allocate(64, 0);
-            assert_eq!(heap_size_of(x as *const c_void), 64);
-            alloc::heap::deallocate(x, 64, 0);
-
-            // A 255 byte request is rounded up to 256 bytes.
-            let x = alloc::heap::allocate(255, 0);
-            assert_eq!(heap_size_of(x as *const c_void), 256);
-            alloc::heap::deallocate(x, 255, 0);
-
-            // A 1MiB request is allocated exactly.
-            let x = alloc::heap::allocate(1024 * 1024, 0);
-            assert_eq!(heap_size_of(x as *const c_void), 1024 * 1024);
-            alloc::heap::deallocate(x, 1024 * 1024, 0);
-
-            // An overaligned 1MiB request is allocated exactly.
-            let x = alloc::heap::allocate(1024 * 1024, 32);
-            assert_eq!(heap_size_of(x as *const c_void), 1024 * 1024);
-            alloc::heap::deallocate(x, 1024 * 1024, 32);
-        }
-    }
-
-    #[cfg(target_os = "windows")]
-    #[test]
-    fn test_alloc() {
-        unsafe {
-            // A 64 byte request is allocated exactly.
-            let x = alloc::heap::allocate(64, 0);
-            assert_eq!(heap_size_of(x as *const c_void), 64);
-            alloc::heap::deallocate(x, 64, 0);
-
-            // A 255 byte request is allocated exactly.
-            let x = alloc::heap::allocate(255, 0);
-            assert_eq!(heap_size_of(x as *const c_void), 255);
-            alloc::heap::deallocate(x, 255, 0);
-
-            // A 1MiB request is allocated exactly.
-            let x = alloc::heap::allocate(1024 * 1024, 0);
-            assert_eq!(heap_size_of(x as *const c_void), 1024 * 1024);
-            alloc::heap::deallocate(x, 1024 * 1024, 0);
-
-            // An overaligned 1MiB request is over-allocated.
-            let x = alloc::heap::allocate(1024 * 1024, 32);
-            assert_eq!(heap_size_of(x as *const c_void), 1024 * 1024 + 32);
-            alloc::heap::deallocate(x, 1024 * 1024, 32);
-        }
-    }
-
-    #[cfg(not(target_os = "windows"))]
-    #[test]
-    fn test_simd() {
-        let x = Box::new(OverAligned(0, 0, 0, 0));
-        assert_eq!(unsafe { heap_size_of(&*x as *const _ as *const c_void) }, 32);
-    }
-
-    #[cfg(target_os = "windows")]
-    #[test]
-    fn test_simd() {
-        let x = Box::new(OverAligned(0, 0, 0, 0));
-        assert_eq!(unsafe { heap_size_of(&*x as *const _ as *const c_void) }, 32 + 32);
-    }
-
-    #[test]
-    fn test_boxed_str() {
-        let x = "raclette".to_owned().into_boxed_str();
-        assert_eq!(x.heap_size_of_children(), 8);
-    }
-}
-
-#[test]
-fn test_heap_size() {
-
-    // Note: jemalloc often rounds up request sizes. However, it does not round up for request
-    // sizes of 8 and higher that are powers of two. We take advantage of knowledge here to make
-    // the sizes of various heap-allocated blocks predictable.
-
-    //-----------------------------------------------------------------------
-    // Start with basic heap block measurement.
-
-    unsafe {
-        // EMPTY is the special non-null address used to represent zero-size allocations.
-        assert_eq!(heap_size_of(EMPTY as *const c_void), 0);
-    }
-
-    //-----------------------------------------------------------------------
-    // Test HeapSizeOf implementations for various built-in types.
-
-    // Not on the heap; 0 bytes.
-    let x = 0i64;
-    assert_eq!(x.heap_size_of_children(), 0);
-
-    // An i64 is 8 bytes.
-    let x = Box::new(0i64);
-    assert_eq!(x.heap_size_of_children(), 8);
-
-    // An ascii string with 16 chars is 16 bytes in UTF-8.
-    let string = String::from("0123456789abcdef");
-    assert_eq!(string.heap_size_of_children(), 16);
-
-    let string_ref: (&String, ()) = (&string, ());
-    assert_eq!(string_ref.heap_size_of_children(), 0);
-
-    let slice: &str = &*string;
-    assert_eq!(slice.heap_size_of_children(), 0);
-
-    // Not on the heap.
-    let x: Option<i32> = None;
-    assert_eq!(x.heap_size_of_children(), 0);
-
-    // Not on the heap.
-    let x = Some(0i64);
-    assert_eq!(x.heap_size_of_children(), 0);
-
-    // The `Some` is not on the heap, but the Box is.
-    let x = Some(Box::new(0i64));
-    assert_eq!(x.heap_size_of_children(), 8);
-
-    // Not on the heap.
-    let x = ::std::sync::Arc::new(0i64);
-    assert_eq!(x.heap_size_of_children(), 0);
-
-    // The `Arc` is not on the heap, but the Box is.
-    let x = ::std::sync::Arc::new(Box::new(0i64));
-    assert_eq!(x.heap_size_of_children(), 8);
-
-    // Zero elements, no heap storage.
-    let x: Vec<i64> = vec![];
-    assert_eq!(x.heap_size_of_children(), 0);
-
-    // Four elements, 8 bytes per element.
-    let x = vec![0i64, 1i64, 2i64, 3i64];
-    assert_eq!(x.heap_size_of_children(), 32);
-}
-
-#[test]
-fn test_boxed_slice() {
-    let x = vec![1i64, 2i64].into_boxed_slice();
-    assert_eq!(x.heap_size_of_children(), 16)
-}
--- a/toolkit/library/gtest/rust/Cargo.lock
+++ b/toolkit/library/gtest/rust/Cargo.lock
@@ -338,28 +338,36 @@ dependencies = [
 
 [[package]]
 name = "fnv"
 version = "1.0.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 
 [[package]]
 name = "freetype"
-version = "0.2.0"
+version = "0.3.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
  "libc 0.2.24 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "futures"
 version = "0.1.13"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 
 [[package]]
+name = "fxhash"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "byteorder 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
 name = "gamma-lut"
 version = "0.2.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
  "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
@@ -424,24 +432,16 @@ dependencies = [
 
 [[package]]
 name = "glob"
 version = "0.2.11"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 
 [[package]]
 name = "heapsize"
-version = "0.3.8"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
-[[package]]
-name = "heapsize"
 version = "0.4.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
  "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "idna"
@@ -1203,18 +1203,18 @@ dependencies = [
  "bincode 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "bit-set 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "bitflags 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "byteorder 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "core-graphics 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "core-text 6.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "dwrote 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "euclid 0.15.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "fnv 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)",
- "freetype 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "freetype 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "fxhash 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "gamma-lut 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "gleam 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)",
  "lazy_static 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
  "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
  "num-traits 0.1.37 (registry+https://github.com/rust-lang/crates.io-index)",
  "plane-split 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "rayon 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "thread_profiler 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -1228,18 +1228,19 @@ version = "0.48.0"
 dependencies = [
  "app_units 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)",
  "bincode 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "byteorder 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "core-foundation 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "core-graphics 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "dwrote 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "euclid 0.15.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "fxhash 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "gleam 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)",
- "heapsize 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
+ "heapsize 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "serde 1.0.8 (registry+https://github.com/rust-lang/crates.io-index)",
  "time 0.1.36 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "webrender_bindings"
 version = "0.1.0"
 dependencies = [
@@ -1302,24 +1303,24 @@ dependencies = [
 "checksum cssparser-macros 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "079adec4af52bb5275eadd004292028c79eb3c5f5b4ee8086a36d4197032f6df"
 "checksum dwrote 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "36e3b27cd0b8a68e00f07e8d8e1e4f4d8a6b8b873290a734f63bd56d792d23e1"
 "checksum either 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "18785c1ba806c258137c937e44ada9ee7e69a37e3c72077542cd2f069d78562a"
 "checksum encoding_c 0.7.6 (registry+https://github.com/rust-lang/crates.io-index)" = "1e563195f16d7439103c49281b8b00bd0f223c16e19f0d500448239a27712570"
 "checksum encoding_rs 0.6.11 (registry+https://github.com/rust-lang/crates.io-index)" = "e00a1b1e95eb46988805ceee6f34cd95c46a6753e290cb3ff0486931989d4a4c"
 "checksum env_logger 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "ed39959122ea027670b704fb70539f4286ddf4a49eefede23bf0b4b2a069ec03"
 "checksum euclid 0.15.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7be9fcb1ce77782eb620253eb02bc1f000545f3c360841a26cda572f10fad4ff"
 "checksum fnv 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)" = "6cc484842f1e2884faf56f529f960cc12ad8c71ce96cc7abba0a067c98fee344"
-"checksum freetype 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fde23272c687e4570aefec06cb71174ec0f5284b725deac4e77ba2665d635faf"
+"checksum freetype 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "398b8a11884898184d55aca9806f002b3cf68f0e860e0cbb4586f834ee39b0e7"
 "checksum futures 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)" = "55f0008e13fc853f79ea8fc86e931486860d4c4c156cdffb59fa5f7fa833660a"
+"checksum fxhash 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c"
 "checksum gamma-lut 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "41f72af1e933f296b827361eb9e70d0267abf8ad0de9ec7fa667bbe67177b297"
 "checksum gdi32-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "0912515a8ff24ba900422ecda800b52f4016a56251922d397c576bf92c690518"
 "checksum gl_generator 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "0940975a4ca12b088d32b5d5134826c47d2e73de4b0b459b05244c01503eccbb"
 "checksum gleam 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)" = "917ee404f414ed77756c12cb44fdcc7cd02f207bf91e1dc91a3ce7da794ec361"
 "checksum glob 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)" = "8be18de09a56b60ed0edf84bc9df007e30040691af7acd1c41874faac5895bfb"
-"checksum heapsize 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)" = "5a376f7402b85be6e0ba504243ecbc0709c48019ecc6286d0540c2e359050c88"
 "checksum heapsize 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "4c7593b1522161003928c959c20a2ca421c68e940d63d75573316a009e48a6d4"
 "checksum idna 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "014b298351066f1512874135335d62a789ffe78a9974f94b43ed5621951eaf7d"
 "checksum itertools 0.5.10 (registry+https://github.com/rust-lang/crates.io-index)" = "4833d6978da405305126af4ac88569b5d71ff758581ce5a987dbfa3755f694fc"
 "checksum itoa 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "eb2f404fbc66fd9aac13e998248505e7ecb2ad8e44ab6388684c5fb11c6c251c"
 "checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d"
 "checksum khronos_api 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d5a08e2a31d665af8f1ca437eab6d00a93c9d62a549f73f9ed8fc2e55b5a91a7"
 "checksum lazy_static 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "6abe0ee2e758cd6bc8a2cd56726359007748fbf4128da998b65d0b70f881e19b"
 "checksum libc 0.2.24 (registry+https://github.com/rust-lang/crates.io-index)" = "38f5c2b18a287cf78b4097db62e20f43cace381dc76ae5c0a3073067f78b7ddc"
--- a/toolkit/library/rust/Cargo.lock
+++ b/toolkit/library/rust/Cargo.lock
@@ -336,28 +336,36 @@ dependencies = [
 
 [[package]]
 name = "fnv"
 version = "1.0.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 
 [[package]]
 name = "freetype"
-version = "0.2.0"
+version = "0.3.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
  "libc 0.2.24 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "futures"
 version = "0.1.13"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 
 [[package]]
+name = "fxhash"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "byteorder 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
 name = "gamma-lut"
 version = "0.2.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
  "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
@@ -422,24 +430,16 @@ dependencies = [
 
 [[package]]
 name = "glob"
 version = "0.2.11"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 
 [[package]]
 name = "heapsize"
-version = "0.3.8"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
-[[package]]
-name = "heapsize"
 version = "0.4.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
  "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "idna"
@@ -1190,18 +1190,18 @@ dependencies = [
  "bincode 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "bit-set 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "bitflags 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "byteorder 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "core-graphics 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "core-text 6.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "dwrote 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "euclid 0.15.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "fnv 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)",
- "freetype 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "freetype 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "fxhash 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "gamma-lut 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "gleam 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)",
  "lazy_static 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
  "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
  "num-traits 0.1.37 (registry+https://github.com/rust-lang/crates.io-index)",
  "plane-split 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "rayon 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "thread_profiler 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -1215,18 +1215,19 @@ version = "0.48.0"
 dependencies = [
  "app_units 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)",
  "bincode 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "byteorder 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "core-foundation 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "core-graphics 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "dwrote 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "euclid 0.15.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "fxhash 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "gleam 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)",
- "heapsize 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
+ "heapsize 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "serde 1.0.8 (registry+https://github.com/rust-lang/crates.io-index)",
  "time 0.1.36 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "webrender_bindings"
 version = "0.1.0"
 dependencies = [
@@ -1289,24 +1290,24 @@ dependencies = [
 "checksum cssparser-macros 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "079adec4af52bb5275eadd004292028c79eb3c5f5b4ee8086a36d4197032f6df"
 "checksum dwrote 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "36e3b27cd0b8a68e00f07e8d8e1e4f4d8a6b8b873290a734f63bd56d792d23e1"
 "checksum either 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "18785c1ba806c258137c937e44ada9ee7e69a37e3c72077542cd2f069d78562a"
 "checksum encoding_c 0.7.6 (registry+https://github.com/rust-lang/crates.io-index)" = "1e563195f16d7439103c49281b8b00bd0f223c16e19f0d500448239a27712570"
 "checksum encoding_rs 0.6.11 (registry+https://github.com/rust-lang/crates.io-index)" = "e00a1b1e95eb46988805ceee6f34cd95c46a6753e290cb3ff0486931989d4a4c"
 "checksum env_logger 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "ed39959122ea027670b704fb70539f4286ddf4a49eefede23bf0b4b2a069ec03"
 "checksum euclid 0.15.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7be9fcb1ce77782eb620253eb02bc1f000545f3c360841a26cda572f10fad4ff"
 "checksum fnv 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)" = "6cc484842f1e2884faf56f529f960cc12ad8c71ce96cc7abba0a067c98fee344"
-"checksum freetype 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fde23272c687e4570aefec06cb71174ec0f5284b725deac4e77ba2665d635faf"
+"checksum freetype 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "398b8a11884898184d55aca9806f002b3cf68f0e860e0cbb4586f834ee39b0e7"
 "checksum futures 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)" = "55f0008e13fc853f79ea8fc86e931486860d4c4c156cdffb59fa5f7fa833660a"
+"checksum fxhash 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c"
 "checksum gamma-lut 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "41f72af1e933f296b827361eb9e70d0267abf8ad0de9ec7fa667bbe67177b297"
 "checksum gdi32-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "0912515a8ff24ba900422ecda800b52f4016a56251922d397c576bf92c690518"
 "checksum gl_generator 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "0940975a4ca12b088d32b5d5134826c47d2e73de4b0b459b05244c01503eccbb"
 "checksum gleam 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)" = "917ee404f414ed77756c12cb44fdcc7cd02f207bf91e1dc91a3ce7da794ec361"
 "checksum glob 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)" = "8be18de09a56b60ed0edf84bc9df007e30040691af7acd1c41874faac5895bfb"
-"checksum heapsize 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)" = "5a376f7402b85be6e0ba504243ecbc0709c48019ecc6286d0540c2e359050c88"
 "checksum heapsize 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "4c7593b1522161003928c959c20a2ca421c68e940d63d75573316a009e48a6d4"
 "checksum idna 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "014b298351066f1512874135335d62a789ffe78a9974f94b43ed5621951eaf7d"
 "checksum itertools 0.5.10 (registry+https://github.com/rust-lang/crates.io-index)" = "4833d6978da405305126af4ac88569b5d71ff758581ce5a987dbfa3755f694fc"
 "checksum itoa 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "eb2f404fbc66fd9aac13e998248505e7ecb2ad8e44ab6388684c5fb11c6c251c"
 "checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d"
 "checksum khronos_api 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d5a08e2a31d665af8f1ca437eab6d00a93c9d62a549f73f9ed8fc2e55b5a91a7"
 "checksum lazy_static 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "6abe0ee2e758cd6bc8a2cd56726359007748fbf4128da998b65d0b70f881e19b"
 "checksum libc 0.2.24 (registry+https://github.com/rust-lang/crates.io-index)" = "38f5c2b18a287cf78b4097db62e20f43cace381dc76ae5c0a3073067f78b7ddc"