diff options
author | Christian Poveda <31802960+pvdrz@users.noreply.github.com> | 2022-09-23 21:21:17 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-09-23 21:21:17 -0500 |
commit | 1b7e4705ddf361a6eaffc0327aa47f122ebbc76f (patch) | |
tree | 09b846c15394d331489c2ae0ff6bf611736aa428 /src/codegen/mod.rs | |
parent | 6de2d3d1c17bb4dd432daabf2cd858254663f49e (diff) | |
parent | cc78b6fdb6e829e5fb8fa1639f2182cb49333569 (diff) |
Merge pull request #2278 from ferrous-systems/size_t
Map size_t to usize by default and check compatibility [Rebased]
Diffstat (limited to 'src/codegen/mod.rs')
-rw-r--r-- | src/codegen/mod.rs | 27 |
1 files changed, 26 insertions, 1 deletions
diff --git a/src/codegen/mod.rs b/src/codegen/mod.rs index 843d5111..8eb7b013 100644 --- a/src/codegen/mod.rs +++ b/src/codegen/mod.rs @@ -836,9 +836,34 @@ impl CodeGenerator for Type { } // If this is a known named type, disallow generating anything - // for it too. + // for it too. If size_t -> usize conversions are enabled, we + // need to check that these conversions are permissible, but + // nothing needs to be generated, still. let spelling = self.name().expect("Unnamed alias?"); if utils::type_from_named(ctx, spelling).is_some() { + if let "size_t" | "ssize_t" = spelling { + let layout = inner_item + .kind() + .expect_type() + .layout(ctx) + .expect("No layout?"); + assert_eq!( + layout.size, + ctx.target_pointer_size(), + "Target platform requires `--no-size_t-is-usize`. The size of `{}` ({}) does not match the target pointer size ({})", + spelling, + layout.size, + ctx.target_pointer_size(), + ); + assert_eq!( + layout.align, + ctx.target_pointer_size(), + "Target platform requires `--no-size_t-is-usize`. The alignment of `{}` ({}) does not match the target pointer size ({})", + spelling, + layout.align, + ctx.target_pointer_size(), + ); + } return; } |