summaryrefslogtreecommitdiff
path: root/src/codegen/mod.rs
diff options
context:
space:
mode:
authorChristian Poveda <christian.poveda@ferrous-systems.com>2022-09-26 10:50:46 -0500
committerChristian Poveda <christian.poveda@ferrous-systems.com>2022-09-26 10:50:46 -0500
commit76e8fa29f945477b92c780aa782624a8d8a65488 (patch)
tree4e1fc959ed0804ec57db2492da55708f80310914 /src/codegen/mod.rs
parent0e4c1ae92c8ab89bf2285cf3b4540821fb480850 (diff)
parent0798bdaccfd352c9b2394b1741508000b99ba1bb (diff)
Merge remote-tracking branch 'emilio/less-macro-magic' into sovereign-module-of-syn
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 bc2c9fe2..5660b126 100644
--- a/src/codegen/mod.rs
+++ b/src/codegen/mod.rs
@@ -837,9 +837,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;
}