You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
@icculus: I get strict-aliasing warnings from voipchat.c from gcc <= 4.9:
voipchat.c: In function 'SendClientAudioToServer':
voipchat.c:94:9: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
((Uint64 *) scratch_area)[0] = SDL_SwapLE64(0); /* just being nice and leaving space in the buffer for the server to replace. */
^
voipchat.c: In function 'mainloop':
voipchat.c:228:17: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
((Uint64 *) scratch_area)[0] = SDL_SwapLE64(0);
^
The following fixes it for me, and the asm output from gcc-7.5 before and after are identical.
(Asm outputs from gcc 4.4 are also identical if I use -fno-strict-aliasing.) OK to apply?
diff --git a/examples/voipchat.c b/examples/voipchat.c
index 145e2ea..8952fc1 100644
--- a/examples/voipchat.c+++ b/examples/voipchat.c@@ -36,9 +36,9 @@ static SDL_Renderer *renderer = NULL;
static SDL_AudioDeviceID audio_device = 0;
static SDL_AudioDeviceID capture_device = 0;
static SDL_AudioStream *capture_stream = NULL;
static const SDL_AudioSpec audio_spec = { SDL_AUDIO_S16LE, 1, 8000 };
-static Uint8 scratch_area[4096];+static Uint64 scratch_area[512];
static Voice *FindVoiceByAddr(const SDLNet_Address *addr, const Uint16 port)
{
Voice *i;
@@ -88,12 +88,12 @@ static void ClearOldVoices(const Uint64 now)
static const int extra = (int) (sizeof (Uint64) * 2);
static void SendClientAudioToServer(void)
{
- const int br = SDL_GetAudioStreamData(capture_stream, scratch_area + extra, max_datagram - extra);+ const int br = SDL_GetAudioStreamData(capture_stream, scratch_area + (extra / sizeof(Uint64)), max_datagram - extra);
if (br > 0) {
- ((Uint64 *) scratch_area)[0] = SDL_SwapLE64(0); /* just being nice and leaving space in the buffer for the server to replace. */- ((Uint64 *) scratch_area)[1] = SDL_SwapLE64(++next_idnum);+ scratch_area[0] = SDL_SwapLE64(0); /* just being nice and leaving space in the buffer for the server to replace. */+ scratch_area[1] = SDL_SwapLE64(++next_idnum);
SDL_Log("CLIENT: Sending %d new bytes to server at %s:%d...", br + extra, SDLNet_GetAddressString(server_addr), (int) server_port);
SDLNet_SendDatagram(sock, server_addr, server_port, scratch_area, br + extra);
}
}
@@ -224,10 +224,10 @@ static void mainloop(void)
}
}
if (!last_send_ticks || ((now - last_send_ticks) > 5000)) { /* send a keepalive packet if we haven't transmitted for a bit. */
- ((Uint64 *) scratch_area)[0] = SDL_SwapLE64(0);- ((Uint64 *) scratch_area)[1] = SDL_SwapLE64(++next_idnum);+ scratch_area[0] = SDL_SwapLE64(0);+ scratch_area[1] = SDL_SwapLE64(++next_idnum);
SDL_Log("CLIENT: Sending %d keepalive bytes to server at %s:%d...", extra, SDLNet_GetAddressString(server_addr), (int) server_port);
SDLNet_SendDatagram(sock, server_addr, server_port, scratch_area, extra);
last_send_ticks = now;
}
The text was updated successfully, but these errors were encountered:
@icculus: I get strict-aliasing warnings from voipchat.c from gcc <= 4.9:
The following fixes it for me, and the asm output from gcc-7.5 before and after are identical.
(Asm outputs from gcc 4.4 are also identical if I use -fno-strict-aliasing.) OK to apply?
The text was updated successfully, but these errors were encountered: