Fix GCC 8.3.0 warning: ‘packed’ attribute ignored.
Fix the following GCC 8.3.0 warning:
aom/aom_dsp/simd/v64_intrinsics_arm.h: In function ‘u32_store_unaligned’:
aom/aom_dsp/simd/v64_intrinsics_arm.h:74:3: error: ‘packed’ attribute ignored for type ‘uint32_t *’ {aka ‘unsigned int *’} [-Werror=attributes]
*((__attribute((packed)) uint32_t *)p) = a;
^
GCC 8.3.0 ignores __attribute__((packed)) on individual variables, but
we can tell it that a struct is packed (unaligned), which has the same
effect.
Note: Our Jenkins nightly builds use GCC 6.3.0, which does not emit this
warning.
Change-Id: I84486eb5f45c30e57c07431968385dff9b34bfe1
diff --git a/aom_dsp/simd/v64_intrinsics_arm.h b/aom_dsp/simd/v64_intrinsics_arm.h
index 8f39ad6..0f661a1 100644
--- a/aom_dsp/simd/v64_intrinsics_arm.h
+++ b/aom_dsp/simd/v64_intrinsics_arm.h
@@ -71,7 +71,11 @@
#elif defined(__CC_ARM)
*(__packed uint32_t *)p) = a;
#elif defined(__GNUC__)
- *((__attribute((packed)) uint32_t *)p) = a;
+ struct Unaligned32Struct {
+ uint32_t value;
+ uint8_t dummy; // To make the size non-power-of-two.
+ } __attribute__((__packed__));
+ ((struct Unaligned32Struct *)p)->value = a;
#else
vst1_lane_u32((uint32_t *)p, vreinterpret_u32_s64((uint64x1_t)(uint64_t)a),
0);