- Timestamp:
- 07/02/09 09:58:01 (5 months ago)
- Files:
-
- 1 modified
Legend:
- Unmodified
- Added
- Removed
-
mpich2/trunk/src/mpid/ch3/channels/nemesis/nemesis/include/mpid_nem_impl.h
r4707 r4888 105 105 MPID_nem_pkt_lmt_cookie_t lmt_cookie; 106 106 } MPIDI_CH3_nem_pkt_t; 107 108 109 /* MPID_PKT_DECL_CAST(pkt_u_var, s_pkt_type, s_pkt_p_var) 110 To avoid strict aliasing warnings when doing something like: 111 pkt_t upkt; 112 rts_pkt_t * const rts_pkt = (rts_pkt_t *)&upkt; 113 this macro does the same but through a union. 114 115 pkt_u_var -- variable name of the packet union 116 s_pkt_type -- type of the sub-packet 117 s_pkt_p_var -- variable name of the sub-packet pointer 118 */ 119 #define MPID_PKT_DECL_CAST(pkt_u_var, s_pkt_type, s_pkt_p_var) \ 120 union \ 121 { \ 122 MPIDI_CH3_Pkt_t p; \ 123 s_pkt_type s; \ 124 } pkt_u_var; \ 125 s_pkt_type * const s_pkt_p_var = &pkt_u_var.s 107 126 108 127 … … 153 172 154 173 #define MPID_nem_lmt_send_CTS(vc, rreq, r_cookie_buf, r_cookie_len) do { \ 155 MPIDI_CH3_Pkt_t _upkt; \ 156 MPID_nem_pkt_lmt_cts_t * const _cts_pkt = (MPID_nem_pkt_lmt_cts_t *)&_upkt; \ 174 MPID_PKT_DECL_CAST(_upkt, MPID_nem_pkt_lmt_cts_t, _cts_pkt); \ 157 175 MPID_Request *_cts_req; \ 158 176 MPID_IOV _iov[2]; \ … … 187 205 { 188 206 int mpi_errno = MPI_SUCCESS; 189 MPIDI_CH3_Pkt_t _upkt; 190 MPID_nem_pkt_lmt_cookie_t * const cookie_pkt = (MPID_nem_pkt_lmt_cookie_t *)&_upkt; 207 MPID_PKT_DECL_CAST(_upkt, MPID_nem_pkt_lmt_cookie_t, cookie_pkt); 191 208 MPID_Request *cookie_req; 192 209 MPID_IOV iov[2]; … … 232 249 233 250 #define MPID_nem_lmt_send_DONE(vc, rreq) do { \ 234 MPIDI_CH3_Pkt_t _upkt; \ 235 MPID_nem_pkt_lmt_done_t * const _done_pkt = (MPID_nem_pkt_lmt_done_t *)&_upkt; \ 251 MPID_PKT_DECL_CAST(_upkt, MPID_nem_pkt_lmt_done_t, _done_pkt); \ 236 252 MPID_Request *_done_req; \ 237 253 \ … … 240 256 _done_pkt->req_id = (rreq)->ch.lmt_req_id; \ 241 257 \ 242 mpi_errno = MPIDI_CH3_iStartMsg((vc), _done_pkt, sizeof(*_done_pkt), &_done_req); \258 mpi_errno = MPIDI_CH3_iStartMsg((vc), _done_pkt, sizeof(*_done_pkt), &_done_req); \ 243 259 MPIU_ERR_CHKANDJUMP(mpi_errno, mpi_errno, MPI_ERR_OTHER, "**donepkt"); \ 244 260 if (_done_req != NULL) \
