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-18 17:37:06 +0059
commita0a1d83c28b77889ae9214852acaae9f00998dd4 (patch)
tree5e3dac2daba031e05ae47511c1065c0815aa3daa
parent94b66c366a6e74000cdee1dfd77d713a6ca9aa93 (diff)
downloadbase-a0a1d83c28b77889ae9214852acaae9f00998dd4.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);