@@ -111,7 +111,15 @@ static inline int template_callback_array(unpack_user* u, unsigned int n, msgpac
111111}
112112
113113static inline int template_callback_array_item (unpack_user * u , msgpack_object * c , msgpack_object o )
114- { c -> via .array .ptr [c -> via .array .size ++ ] = o ; return 0 ; }
114+ {
115+ #if defined(__GNUC__ ) && !defined(__clang__ )
116+ memcpy (& c -> via .array .ptr [c -> via .array .size ], & o , sizeof (msgpack_object ));
117+ #else /* __GNUC__ && !__clang__ */
118+ c -> via .array .ptr [c -> via .array .size ] = o ;
119+ #endif /* __GNUC__ && !__clang__ */
120+ ++ c -> via .array .size ;
121+ return 0 ;
122+ }
115123
116124static inline int template_callback_map (unpack_user * u , unsigned int n , msgpack_object * o )
117125{
@@ -124,8 +132,13 @@ static inline int template_callback_map(unpack_user* u, unsigned int n, msgpack_
124132
125133static inline int template_callback_map_item (unpack_user * u , msgpack_object * c , msgpack_object k , msgpack_object v )
126134{
135+ #if defined(__GNUC__ ) && !defined(__clang__ )
136+ memcpy (& c -> via .map .ptr [c -> via .map .size ].key , & k , sizeof (msgpack_object ));
137+ memcpy (& c -> via .map .ptr [c -> via .map .size ].val , & v , sizeof (msgpack_object ));
138+ #else /* __GNUC__ && !__clang__ */
127139 c -> via .map .ptr [c -> via .map .size ].key = k ;
128140 c -> via .map .ptr [c -> via .map .size ].val = v ;
141+ #endif /* __GNUC__ && !__clang__ */
129142 ++ c -> via .map .size ;
130143 return 0 ;
131144}
0 commit comments