If the value is a 32 bit value (e.g. a constant like 0), the larger
shifts are undefined, and e.g. clang end up only writing 32 bits
for an AV_WN64(ptr, 0);
This fixes the VP8 decoder in build configurations with clang, with
fast unaligned support and the gcc version of AV_WN macro disabled.
---
libavutil/intreadwrite.h | 36 ++++++++++++++++++------------------
1 file changed, 18 insertions(+), 18 deletions(-)
diff --git a/libavutil/intreadwrite.h b/libavutil/intreadwrite.h
index cdf1ef4..2307e77 100644
--- a/libavutil/intreadwrite.h
+++ b/libavutil/intreadwrite.h
@@ -272,15 +272,15 @@ union unaligned_16 { uint16_t l; }
__attribute__((packed)) av_alias;
(uint64_t)((const uint8_t*)(x))[7])
#endif
#ifndef AV_WB64
-# define AV_WB64(p, d) do { \
- ((uint8_t*)(p))[7] = (d); \
- ((uint8_t*)(p))[6] = (d)>>8; \
- ((uint8_t*)(p))[5] = (d)>>16; \
- ((uint8_t*)(p))[4] = (d)>>24; \
- ((uint8_t*)(p))[3] = (d)>>32; \
- ((uint8_t*)(p))[2] = (d)>>40; \
- ((uint8_t*)(p))[1] = (d)>>48; \
- ((uint8_t*)(p))[0] = (d)>>56; \
+# define AV_WB64(p, d) do { \
+ ((uint8_t*)(p))[7] = (d); \
+ ((uint8_t*)(p))[6] = (d)>>8; \
+ ((uint8_t*)(p))[5] = (d)>>16; \
+ ((uint8_t*)(p))[4] = (d)>>24; \
+ ((uint8_t*)(p))[3] = (uint64_t)(d)>>32; \
+ ((uint8_t*)(p))[2] = (uint64_t)(d)>>40; \
+ ((uint8_t*)(p))[1] = (uint64_t)(d)>>48; \
+ ((uint8_t*)(p))[0] = (uint64_t)(d)>>56; \
} while(0)
#endif
@@ -296,15 +296,15 @@ union unaligned_16 { uint16_t l; }
__attribute__((packed)) av_alias;
(uint64_t)((const uint8_t*)(x))[0])
#endif
#ifndef AV_WL64
-# define AV_WL64(p, d) do { \
- ((uint8_t*)(p))[0] = (d); \
- ((uint8_t*)(p))[1] = (d)>>8; \
- ((uint8_t*)(p))[2] = (d)>>16; \
- ((uint8_t*)(p))[3] = (d)>>24; \
- ((uint8_t*)(p))[4] = (d)>>32; \
- ((uint8_t*)(p))[5] = (d)>>40; \
- ((uint8_t*)(p))[6] = (d)>>48; \
- ((uint8_t*)(p))[7] = (d)>>56; \
+# define AV_WL64(p, d) do { \
+ ((uint8_t*)(p))[0] = (d); \
+ ((uint8_t*)(p))[1] = (d)>>8; \
+ ((uint8_t*)(p))[2] = (d)>>16; \
+ ((uint8_t*)(p))[3] = (d)>>24; \
+ ((uint8_t*)(p))[4] = (uint64_t)(d)>>32; \
+ ((uint8_t*)(p))[5] = (uint64_t)(d)>>40; \
+ ((uint8_t*)(p))[6] = (uint64_t)(d)>>48; \
+ ((uint8_t*)(p))[7] = (uint64_t)(d)>>56; \
} while(0)
#endif
--
2.7.4 (Apple Git-66)
_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel