summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOliver Geller <oliver.geller@rochester.edu>2017-09-18 18:42:12 -0400
committerOliver Geller <oliver.geller@rochester.edu>2017-09-19 22:41:10 -0400
commit95879ddfbf2abe335118fcbb9308753bb092a21c (patch)
treeefdbcd91ca390a1e8537d4b5e340fbd2b4306950
parent48429734f10165d53584486af2d584ebde19577c (diff)
Ensure all derive analyses check array limit on bitfields
-rw-r--r--src/ir/analysis/derive_copy.rs8
-rw-r--r--src/ir/analysis/derive_debug.rs8
-rw-r--r--src/ir/analysis/derive_default.rs8
-rw-r--r--src/ir/analysis/derive_hash.rs8
-rw-r--r--src/ir/analysis/derive_partial_eq_or_partial_ord.rs8
5 files changed, 40 insertions, 0 deletions
diff --git a/src/ir/analysis/derive_copy.rs b/src/ir/analysis/derive_copy.rs
index ef01c65a..fa9cd6e0 100644
--- a/src/ir/analysis/derive_copy.rs
+++ b/src/ir/analysis/derive_copy.rs
@@ -266,6 +266,14 @@ impl<'ctx> MonotoneFramework for CannotDeriveCopy<'ctx> {
self.is_not_copy(data.ty())
}
Field::Bitfields(ref bfu) => {
+ if bfu.layout().align > RUST_DERIVE_IN_ARRAY_LIMIT {
+ trace!(
+ " we cannot derive Copy for a bitfield larger then \
+ the limit"
+ );
+ return true;
+ }
+
bfu.bitfields().iter().any(|b| {
self.is_not_copy(b.ty())
})
diff --git a/src/ir/analysis/derive_debug.rs b/src/ir/analysis/derive_debug.rs
index 2bfaff71..7df745c9 100644
--- a/src/ir/analysis/derive_debug.rs
+++ b/src/ir/analysis/derive_debug.rs
@@ -268,6 +268,14 @@ impl<'ctx> MonotoneFramework for CannotDeriveDebug<'ctx> {
self.is_not_debug(data.ty())
}
Field::Bitfields(ref bfu) => {
+ if bfu.layout().align > RUST_DERIVE_IN_ARRAY_LIMIT {
+ trace!(
+ " we cannot derive Debug for a bitfield larger then \
+ the limit"
+ );
+ return true;
+ }
+
bfu.bitfields().iter().any(|b| {
self.is_not_debug(b.ty())
})
diff --git a/src/ir/analysis/derive_default.rs b/src/ir/analysis/derive_default.rs
index 96805863..7acbe04a 100644
--- a/src/ir/analysis/derive_default.rs
+++ b/src/ir/analysis/derive_default.rs
@@ -308,6 +308,14 @@ impl<'ctx> MonotoneFramework for CannotDeriveDefault<'ctx> {
self.is_not_default(data.ty())
}
Field::Bitfields(ref bfu) => {
+ if bfu.layout().align > RUST_DERIVE_IN_ARRAY_LIMIT {
+ trace!(
+ " we cannot derive Default for a bitfield larger then \
+ the limit"
+ );
+ return true;
+ }
+
bfu.bitfields().iter().any(|b| {
!self.ctx.whitelisted_items().contains(
&b.ty(),
diff --git a/src/ir/analysis/derive_hash.rs b/src/ir/analysis/derive_hash.rs
index 80ea0abf..5313cae3 100644
--- a/src/ir/analysis/derive_hash.rs
+++ b/src/ir/analysis/derive_hash.rs
@@ -283,6 +283,14 @@ impl<'ctx> MonotoneFramework for CannotDeriveHash<'ctx> {
self.cannot_derive_hash.contains(&data.ty())
}
Field::Bitfields(ref bfu) => {
+ if bfu.layout().align > RUST_DERIVE_IN_ARRAY_LIMIT {
+ trace!(
+ " we cannot derive Hash for a bitfield larger then \
+ the limit"
+ );
+ return true;
+ }
+
bfu.bitfields().iter().any(|b| {
!self.ctx.whitelisted_items().contains(
&b.ty(),
diff --git a/src/ir/analysis/derive_partial_eq_or_partial_ord.rs b/src/ir/analysis/derive_partial_eq_or_partial_ord.rs
index 1d4a5939..1c3ab059 100644
--- a/src/ir/analysis/derive_partial_eq_or_partial_ord.rs
+++ b/src/ir/analysis/derive_partial_eq_or_partial_ord.rs
@@ -292,6 +292,14 @@ impl<'ctx> MonotoneFramework for CannotDerivePartialEqOrPartialOrd<'ctx> {
)
}
Field::Bitfields(ref bfu) => {
+ if bfu.layout().align > RUST_DERIVE_IN_ARRAY_LIMIT {
+ trace!(
+ " we cannot derive PartialEq for a bitfield larger then \
+ the limit"
+ );
+ return true;
+ }
+
bfu.bitfields().iter().any(|b| {
!self.ctx.whitelisted_items().contains(
&b.ty(),