From 901bd2c429ac51dd143a2a4bfc07c382dfb21e72 Mon Sep 17 00:00:00 2001 From: Timotej Kapus Date: Mon, 22 Jun 2015 01:09:32 +0100 Subject: Fixed a bug with how non power 2 values were written to memory, added test for it --- lib/Core/Memory.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'lib/Core') diff --git a/lib/Core/Memory.cpp b/lib/Core/Memory.cpp index 50e9aa9f..47bc7576 100644 --- a/lib/Core/Memory.cpp +++ b/lib/Core/Memory.cpp @@ -529,7 +529,10 @@ void ObjectState::write(unsigned offset, ref value) { // Check for writes of constant values. if (ConstantExpr *CE = dyn_cast(value)) { Expr::Width w = CE->getWidth(); - if (w <= 64) { + //assuming width can't be 0 so I can miss half of power of two check + assert(w > 0); + //also checks that w is a power of two + if (w <= 64 && !(w & (w - 1))) { uint64_t val = CE->getZExtValue(); switch (w) { default: assert(0 && "Invalid write size!"); -- cgit 1.4.1