Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=60262e58e305f27d05eefeda172117521514f364
Commit:     60262e58e305f27d05eefeda172117521514f364
Parent:     e7cf261b447ed7edbf7c10c046e078bda799afaf
Author:     Al Viro <[EMAIL PROTECTED]>
AuthorDate: Thu Jul 26 17:46:19 2007 +0100
Committer:  Linus Torvalds <[EMAIL PROTECTED]>
CommitDate: Thu Jul 26 11:11:57 2007 -0700

    arm unaligned.h annotations
    
        Have put_unaligned() warn if types would be wrong
    for assignment, slap force-casts where needed.  Cast the
    result of get_unaligned to typeof(*ptr).  With that in
    place we get proper typechecking, both from gcc and from sparse,
    including that for bitwise types.
    
    Signed-off-by: Al Viro <[EMAIL PROTECTED]>
    Signed-off-by: Linus Torvalds <[EMAIL PROTECTED]>
---
 include/asm-arm/unaligned.h |   22 ++++++++++++----------
 1 files changed, 12 insertions(+), 10 deletions(-)

diff --git a/include/asm-arm/unaligned.h b/include/asm-arm/unaligned.h
index 795b9e5..8431f6e 100644
--- a/include/asm-arm/unaligned.h
+++ b/include/asm-arm/unaligned.h
@@ -60,24 +60,24 @@ extern int __bug_unaligned_x(const void *ptr);
                __get_unaligned_4_be((__p+4)))
 
 #define __get_unaligned_le(ptr)                                                
\
-       ({                                                              \
+       ((__force typeof(*(ptr)))({                                     \
                const __u8 *__p = (const __u8 *)(ptr);                  \
                __builtin_choose_expr(sizeof(*(ptr)) == 1, *__p,        \
                  __builtin_choose_expr(sizeof(*(ptr)) == 2, 
__get_unaligned_2_le(__p), \
                  __builtin_choose_expr(sizeof(*(ptr)) == 4, 
__get_unaligned_4_le(__p), \
                  __builtin_choose_expr(sizeof(*(ptr)) == 8, 
__get_unaligned_8_le(__p), \
                    (void)__bug_unaligned_x(__p)))));                   \
-       })
+       }))
 
 #define __get_unaligned_be(ptr)                                                
\
-       ({                                                              \
+       ((__force typeof(*(ptr)))({                                     \
                const __u8 *__p = (const __u8 *)(ptr);                  \
                __builtin_choose_expr(sizeof(*(ptr)) == 1, *__p,        \
                  __builtin_choose_expr(sizeof(*(ptr)) == 2, 
__get_unaligned_2_be(__p), \
                  __builtin_choose_expr(sizeof(*(ptr)) == 4, 
__get_unaligned_4_be(__p), \
                  __builtin_choose_expr(sizeof(*(ptr)) == 8, 
__get_unaligned_8_be(__p), \
                    (void)__bug_unaligned_x(__p)))));                   \
-       })
+       }))
 
 
 static inline void __put_unaligned_2_le(__u32 __v, register __u8 *__p)
@@ -131,15 +131,16 @@ static inline void __put_unaligned_8_be(const unsigned 
long long __v, register _
  */
 #define __put_unaligned_le(val,ptr)                                    \
        ({                                                      \
+               (void)sizeof(*(ptr) = (val));                   \
                switch (sizeof(*(ptr))) {                       \
                case 1:                                         \
                        *(ptr) = (val);                         \
                        break;                                  \
-               case 2: __put_unaligned_2_le((val),(__u8 *)(ptr));      \
+               case 2: __put_unaligned_2_le((__force u16)(val),(__u8 *)(ptr)); 
\
                        break;                                  \
-               case 4: __put_unaligned_4_le((val),(__u8 *)(ptr));      \
+               case 4: __put_unaligned_4_le((__force u32)(val),(__u8 *)(ptr)); 
\
                        break;                                  \
-               case 8: __put_unaligned_8_le((val),(__u8 *)(ptr)); \
+               case 8: __put_unaligned_8_le((__force u64)(val),(__u8 *)(ptr)); 
\
                        break;                                  \
                default: __bug_unaligned_x(ptr);                \
                        break;                                  \
@@ -149,15 +150,16 @@ static inline void __put_unaligned_8_be(const unsigned 
long long __v, register _
 
 #define __put_unaligned_be(val,ptr)                                    \
        ({                                                      \
+               (void)sizeof(*(ptr) = (val));                   \
                switch (sizeof(*(ptr))) {                       \
                case 1:                                         \
                        *(ptr) = (val);                         \
                        break;                                  \
-               case 2: __put_unaligned_2_be((val),(__u8 *)(ptr));      \
+               case 2: __put_unaligned_2_be((__force u16)(val),(__u8 *)(ptr)); 
\
                        break;                                  \
-               case 4: __put_unaligned_4_be((val),(__u8 *)(ptr));      \
+               case 4: __put_unaligned_4_be((__force u32)(val),(__u8 *)(ptr)); 
\
                        break;                                  \
-               case 8: __put_unaligned_8_be((val),(__u8 *)(ptr)); \
+               case 8: __put_unaligned_8_be((__force u64)(val),(__u8 *)(ptr)); 
\
                        break;                                  \
                default: __bug_unaligned_x(ptr);                \
                        break;                                  \
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to