summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBernhard Rosenkraenzer <Bernhard.Rosenkranzer@linaro.org>2011-12-08 14:42:13 +0059
committerBernhard Rosenkraenzer <Bernhard.Rosenkranzer@linaro.org>2011-12-17 11:55:30 +0059
commit774b8297652c91ddd52039397d1b522734a657ea (patch)
treeed3246a2cdc735ca595572555c74b200329505a4
parent03e7cf3b8467686d5ec804dabed517179237df03 (diff)
downloadbase-774b8297652c91ddd52039397d1b522734a657ea.tar.gz
frameworks/base: Fix aliasing violations
Signed-off-by: Bernhard Rosenkraenzer <Bernhard.Rosenkranzer@linaro.org>
-rw-r--r--include/binder/Binder.h5
-rw-r--r--libs/binder/Binder.cpp2
-rw-r--r--libs/utils/ResourceTypes.cpp4
3 files changed, 8 insertions, 3 deletions
diff --git a/include/binder/Binder.h b/include/binder/Binder.h
index ba3ac4b99074..0a01828ce2da 100644
--- a/include/binder/Binder.h
+++ b/include/binder/Binder.h
@@ -69,7 +69,10 @@ private:
class Extras;
- Extras* mExtras;
+ union {
+ Extras* mExtras;
+ volatile int32_t mExtrasInt;
+ };
void* mReserved0;
};
diff --git a/libs/binder/Binder.cpp b/libs/binder/Binder.cpp
index 9945f9188f52..3517f8f523e7 100644
--- a/libs/binder/Binder.cpp
+++ b/libs/binder/Binder.cpp
@@ -142,7 +142,7 @@ void BBinder::attachObject(
if (!e) {
e = new Extras;
if (android_atomic_cmpxchg(0, reinterpret_cast<int32_t>(e),
- reinterpret_cast<volatile int32_t*>(&mExtras)) != 0) {
+ &mExtrasInt) != 0) {
delete e;
e = mExtras;
}
diff --git a/libs/utils/ResourceTypes.cpp b/libs/utils/ResourceTypes.cpp
index 37c98747d4ed..d9bfa4a53eba 100644
--- a/libs/utils/ResourceTypes.cpp
+++ b/libs/utils/ResourceTypes.cpp
@@ -4540,7 +4540,9 @@ void ResTable::print_value(const Package* pkg, const Res_value& value) const
}
}
} else if (value.dataType == Res_value::TYPE_FLOAT) {
- printf("(float) %g\n", *(const float*)&value.data);
+ float f;
+ memcpy(&f, &value.data, sizeof(float));
+ printf("(float) %g\n", f);
} else if (value.dataType == Res_value::TYPE_DIMENSION) {
printf("(dimension) ");
print_complex(value.data, false);