summaryrefslogtreecommitdiff
path: root/src/codegen/mod.rs
diff options
context:
space:
mode:
authorChristian Poveda <31802960+pvdrz@users.noreply.github.com>2022-09-23 21:21:17 -0500
committerGitHub <noreply@github.com>2022-09-23 21:21:17 -0500
commit1b7e4705ddf361a6eaffc0327aa47f122ebbc76f (patch)
tree09b846c15394d331489c2ae0ff6bf611736aa428 /src/codegen/mod.rs
parent6de2d3d1c17bb4dd432daabf2cd858254663f49e (diff)
parentcc78b6fdb6e829e5fb8fa1639f2182cb49333569 (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.rs27
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;
}