{"action":"created","issue":{"url":"https://api.github.com/repos/chocolate-doom/chocolate-doom/issues/535","labels_url":"https://api.github.com/repos/chocolate-doom/chocolate-doom/issues/535/labels{/name}","comments_url":"https://api.github.com/repos/chocolate-doom/chocolate-doom/issues/535/comments","events_url":"https://api.github.com/repos/chocolate-doom/chocolate-doom/issues/535/events","html_url":"https://github.com/chocolate-doom/chocolate-doom/issues/535","id":71545588,"number":535,"title":"fix all remaining compiler warnings","user":{"login":"fabiangreffrath","id":6449237,"avatar_url":"https://avatars.githubusercontent.com/u/6449237?v=3","gravatar_id":"","url":"https://api.github.com/users/fabiangreffrath","html_url":"https://github.com/fabiangreffrath","followers_url":"https://api.github.com/users/fabiangreffrath/followers","following_url":"https://api.github.com/users/fabiangreffrath/following{/other_user}","gists_url":"https://api.github.com/users/fabiangreffrath/gists{/gist_id}","starred_url":"https://api.github.com/users/fabiangreffrath/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/fabiangreffrath/subscriptions","organizations_url":"https://api.github.com/users/fabiangreffrath/orgs","repos_url":"https://api.github.com/users/fabiangreffrath/repos","events_url":"https://api.github.com/users/fabiangreffrath/events{/privacy}","received_events_url":"https://api.github.com/users/fabiangreffrath/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"milestone":null,"comments":10,"created_at":"2015-04-28T10:16:36Z","updated_at":"2015-05-04T12:59:09Z","closed_at":null,"body":"This is the output to stderr from gcc 5.0.1:\r\n```\r\np_maputl.c: In function ‘InterceptsOverrun’:\r\np_maputl.c:849:43: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]\r\n     InterceptsMemoryOverrun(location + 8, (int) intercept->d.thing);\r\n                                           ^\r\np_saveg.c: In function ‘saveg_readp’:\r\np_saveg.c:187:12: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]\r\n     return (void *) saveg_read32();\r\n            ^\r\np_saveg.c: In function ‘saveg_writep’:\r\np_saveg.c:192:19: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]\r\n     saveg_write32((int) p);\r\n                   ^\r\np_enemy.c: In function ‘A_HeadIceImpact’:\r\np_enemy.c:1914:19: warning: iteration 4u invokes undefined behavior [-Waggressive-loop-optimizations]\r\n         angle = i * ANG45;\r\n                   ^\r\np_enemy.c:1911:5: note: containing loop\r\n     for (i = 0; i < 8; i++)\r\n     ^\r\np_enemy.c: In function ‘A_VolcBallImpact’:\r\np_enemy.c:2538:19: warning: iteration 2u invokes undefined behavior [-Waggressive-loop-optimizations]\r\n         angle = i * ANG90;\r\n                   ^\r\np_enemy.c:2534:5: note: containing loop\r\n     for (i = 0; i < 4; i++)\r\n     ^\r\np_pspr.c: In function ‘A_SpawnRippers’:\r\np_pspr.c:1340:19: warning: iteration 4u invokes undefined behavior [-Waggressive-loop-optimizations]\r\n         angle = i * ANG45;\r\n                   ^\r\np_pspr.c:1337:5: note: containing loop\r\n     for (i = 0; i < 8; i++)\r\n     ^\r\np_enemy.c: In function ‘A_IceGuyMissileExplode’:\r\np_enemy.c:3862:58: warning: iteration 4u invokes undefined behavior [-Waggressive-loop-optimizations]\r\n         mo = P_SpawnMissileAngle(actor, MT_ICEGUY_FX2, i * ANG45,\r\n                                                          ^\r\np_enemy.c:3860:5: note: containing loop\r\n     for (i = 0; i < 8; i++)\r\n     ^\r\nIn file included from sv_save.c:23:0:\r\nsv_save.c: In function ‘StreamIn_player_t’:\r\n../../src/i_swap.h:34:20: warning: value computed is not used [-Wunused-value]\r\n #define LONG(x)   ((signed int) SDL_SwapLE32(x))\r\n                    ^\r\nsv_save.c:33:18: note: in expansion of macro ‘LONG’\r\n #define GET_LONG LONG(*SavePtr.l++)\r\n                  ^\r\nsv_save.c:349:5: note: in expansion of macro ‘GET_LONG’\r\n     GET_LONG;\r\n     ^\r\n../../src/i_swap.h:34:20: warning: value computed is not used [-Wunused-value]\r\n #define LONG(x)   ((signed int) SDL_SwapLE32(x))\r\n                    ^\r\nsv_save.c:33:18: note: in expansion of macro ‘LONG’\r\n #define GET_LONG LONG(*SavePtr.l++)\r\n                  ^\r\nsv_save.c:481:5: note: in expansion of macro ‘GET_LONG’\r\n     GET_LONG;\r\n     ^\r\n../../src/i_swap.h:34:20: warning: value computed is not used [-Wunused-value]\r\n #define LONG(x)   ((signed int) SDL_SwapLE32(x))\r\n                    ^\r\nsv_save.c:33:18: note: in expansion of macro ‘LONG’\r\n #define GET_LONG LONG(*SavePtr.l++)\r\n                  ^\r\nsv_save.c:486:5: note: in expansion of macro ‘GET_LONG’\r\n     GET_LONG;\r\n     ^\r\nsv_save.c: In function ‘StreamIn_thinker_t’:\r\n../../src/i_swap.h:34:20: warning: value computed is not used [-Wunused-value]\r\n #define LONG(x)   ((signed int) SDL_SwapLE32(x))\r\n                    ^\r\nsv_save.c:33:18: note: in expansion of macro ‘LONG’\r\n #define GET_LONG LONG(*SavePtr.l++)\r\n                  ^\r\nsv_save.c:688:5: note: in expansion of macro ‘GET_LONG’\r\n     GET_LONG;\r\n     ^\r\n../../src/i_swap.h:34:20: warning: value computed is not used [-Wunused-value]\r\n #define LONG(x)   ((signed int) SDL_SwapLE32(x))\r\n                    ^\r\nsv_save.c:33:18: note: in expansion of macro ‘LONG’\r\n #define GET_LONG LONG(*SavePtr.l++)\r\n                  ^\r\nsv_save.c:690:5: note: in expansion of macro ‘GET_LONG’\r\n     GET_LONG;\r\n     ^\r\n../../src/i_swap.h:34:20: warning: value computed is not used [-Wunused-value]\r\n #define LONG(x)   ((signed int) SDL_SwapLE32(x))\r\n                    ^\r\nsv_save.c:33:18: note: in expansion of macro ‘LONG’\r\n #define GET_LONG LONG(*SavePtr.l++)\r\n                  ^\r\nsv_save.c:695:5: note: in expansion of macro ‘GET_LONG’\r\n     GET_LONG;\r\n     ^\r\nsv_save.c: In function ‘StreamIn_mobj_t’:\r\n../../src/i_swap.h:34:20: warning: value computed is not used [-Wunused-value]\r\n #define LONG(x)   ((signed int) SDL_SwapLE32(x))\r\n                    ^\r\nsv_save.c:33:18: note: in expansion of macro ‘LONG’\r\n #define GET_LONG LONG(*SavePtr.l++)\r\n                  ^\r\nsv_save.c:769:5: note: in expansion of macro ‘GET_LONG’\r\n     GET_LONG;\r\n     ^\r\n../../src/i_swap.h:34:20: warning: value computed is not used [-Wunused-value]\r\n #define LONG(x)   ((signed int) SDL_SwapLE32(x))\r\n                    ^\r\nsv_save.c:33:18: note: in expansion of macro ‘LONG’\r\n #define GET_LONG LONG(*SavePtr.l++)\r\n                  ^\r\nsv_save.c:771:5: note: in expansion of macro ‘GET_LONG’\r\n     GET_LONG;\r\n     ^\r\n../../src/i_swap.h:34:20: warning: value computed is not used [-Wunused-value]\r\n #define LONG(x)   ((signed int) SDL_SwapLE32(x))\r\n                    ^\r\nsv_save.c:33:18: note: in expansion of macro ‘LONG’\r\n #define GET_LONG LONG(*SavePtr.l++)\r\n                  ^\r\nsv_save.c:786:5: note: in expansion of macro ‘GET_LONG’\r\n     GET_LONG;\r\n     ^\r\n../../src/i_swap.h:34:20: warning: value computed is not used [-Wunused-value]\r\n #define LONG(x)   ((signed int) SDL_SwapLE32(x))\r\n                    ^\r\nsv_save.c:33:18: note: in expansion of macro ‘LONG’\r\n #define GET_LONG LONG(*SavePtr.l++)\r\n                  ^\r\nsv_save.c:788:5: note: in expansion of macro ‘GET_LONG’\r\n     GET_LONG;\r\n     ^\r\n../../src/i_swap.h:34:20: warning: value computed is not used [-Wunused-value]\r\n #define LONG(x)   ((signed int) SDL_SwapLE32(x))\r\n                    ^\r\nsv_save.c:33:18: note: in expansion of macro ‘LONG’\r\n #define GET_LONG LONG(*SavePtr.l++)\r\n                  ^\r\nsv_save.c:793:5: note: in expansion of macro ‘GET_LONG’\r\n     GET_LONG;\r\n     ^\r\n../../src/i_swap.h:34:20: warning: value computed is not used [-Wunused-value]\r\n #define LONG(x)   ((signed int) SDL_SwapLE32(x))\r\n                    ^\r\nsv_save.c:33:18: note: in expansion of macro ‘LONG’\r\n #define GET_LONG LONG(*SavePtr.l++)\r\n                  ^\r\nsv_save.c:820:5: note: in expansion of macro ‘GET_LONG’\r\n     GET_LONG;\r\n     ^\r\nf_finale.c: In function ‘F_DrawMap34End’:\r\nf_finale.c:938:17: warning: variable ‘p2’ set but not used [-Wunused-but-set-variable]\r\n     patch_t*    p2;\r\n                 ^\r\nf_finale.c:937:17: warning: variable ‘p1’ set but not used [-Wunused-but-set-variable]\r\n     patch_t*    p1;\r\n                 ^\r\ng_game.c: In function ‘G_Ticker’:\r\ng_game.c:987:29: warning: redundant redeclaration of ‘player_names’ [-Wredundant-decls]\r\n                 extern char player_names[8][16];\r\n                             ^\r\nIn file included from g_game.c:45:0:\r\nhu_stuff.h:59:13: note: previous declaration of ‘player_names’ was here\r\n extern char player_names[8][16];   // villsa [STRIFE]\r\n             ^\r\np_saveg.c: In function ‘saveg_readp’:\r\np_saveg.c:189:12: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]\r\n     return (void *) saveg_read32();\r\n            ^\r\np_saveg.c: In function ‘saveg_writep’:\r\np_saveg.c:194:19: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]\r\n     saveg_write32((int) p);\r\n                   ^\r\np_setup.c: In function ‘P_LoadThings’:\r\np_setup.c:327:14: warning: variable ‘spawn’ set but not used [-Wunused-but-set-variable]\r\n     boolean  spawn;\r\n              ^\r\nst_stuff.c: In function ‘ST_loadData’:\r\nst_stuff.c:1498:16: warning: variable ‘dword_8848C’ set but not used [-Wunused-but-set-variable]\r\n     static int dword_8848C = 1; // STRIFE-TODO: what is the purpose of this?\r\n                ^\r\nmultiplayer.c: In function ‘SetExMyWarp’:\r\nmultiplayer.c:358:9: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]\r\n     l = (int) val;\r\n         ^\r\nmultiplayer.c: In function ‘SetMAPxyWarp’:\r\nmultiplayer.c:370:9: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]\r\n     l = (int) val;\r\n         ^\r\nmultiplayer.c: In function ‘LevelSelectDialog’:\r\nmultiplayer.c:424:48: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]\r\n                                   SetExMyWarp, (void *) (x * 10 + y));\r\n                                                ^\r\nmultiplayer.c:456:45: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]\r\n                               SetMAPxyWarp, (void *) l);\r\n                                             ^\r\ni_sdlsound.c: In function ‘ExpandSoundData_SRC’:\r\ni_sdlsound.c:343:14: warning: variable ‘alen’ set but not used [-Wunused-but-set-variable]\r\n     uint32_t alen;\r\n              ^\r\ni_sdlmusic.c: In function ‘ReadSubstituteConfig’:\r\ni_sdlmusic.c:636:9: warning: variable ‘old_subst_music_len’ set but not used [-Wunused-but-set-variable]\r\n     int old_subst_music_len;\r\n         ^\r\nmidifile.c: In function ‘ReadVariableLength’:\r\nmidifile.c:153:24: warning: ‘b’ may be used uninitialized in this function [-Wmaybe-uninitialized]\r\n         if ((b & 0x80) == 0)\r\n                        ^\r\nmidifile.c: In function ‘MIDI_LoadFile’:\r\nmidifile.c:284:27: warning: ‘b’ may be used uninitialized in this function [-Wmaybe-uninitialized]\r\n     event->data.meta.type = b;\r\n                           ^\r\nmidifile.c:272:10: note: ‘b’ was declared here\r\n     byte b;\r\n          ^\r\nmidifile.c:222:32: warning: ‘b’ may be used uninitialized in this function [-Wmaybe-uninitialized]\r\n     event->data.channel.param1 = b;\r\n                                ^\r\nmidifile.c:206:10: note: ‘b’ was declared here\r\n     byte b;\r\n          ^\r\nmidifile.c:222:32: warning: ‘b’ may be used uninitialized in this function [-Wmaybe-uninitialized]\r\n     event->data.channel.param1 = b;\r\n                                ^\r\nmidifile.c:206:10: note: ‘b’ was declared here\r\n     byte b;\r\n          ^\r\nmidifile.c:342:26: warning: ‘event_type’ may be used uninitialized in this function [-Wmaybe-uninitialized]\r\n         *last_event_type = event_type;\r\n                          ^\r\nmidifile.c:311:10: note: ‘event_type’ was declared here\r\n     byte event_type;\r\n          ^\r\naes_prng.c: In function ‘AES_SetKey’:\r\naes_prng.c:693:9: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]\r\n         *((uint32_t*)tk[j]) = *((uint32_t*)k[j]);\r\n         ^\r\naes_prng.c:693:9: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]\r\naes_prng.c:702:13: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]\r\n             W[r][t] = *((uint32_t*)tk[j]);\r\n             ^\r\naes_prng.c:725:17: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]\r\n                 *((uint32_t*)tk[j]) ^= *((uint32_t*)tk[j-1]);\r\n                 ^\r\naes_prng.c:725:17: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]\r\naes_prng.c:732:17: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]\r\n                 *((uint32_t*)tk[j]) ^= *((uint32_t*)tk[j-1]);\r\n                 ^\r\naes_prng.c:732:17: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]\r\naes_prng.c:740:17: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]\r\n                 *((uint32_t*)tk[j]) ^= *((uint32_t*)tk[j-1]);\r\n                 ^\r\naes_prng.c:740:17: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]\r\naes_prng.c:748:17: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]\r\n                 W[r][t] = *((uint32_t*)tk[j]);\r\n                 ^\r\naes_prng.c: In function ‘AES_EncryptAligned’:\r\naes_prng.c:781:28: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]\r\n                            ^ *((uint32_t*)T2[temp[1].b[1]])\r\n                            ^\r\naes_prng.c:782:28: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]\r\n                            ^ *((uint32_t*)T3[temp[2].b[2]])\r\n                            ^\r\naes_prng.c:783:28: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]\r\n                            ^ *((uint32_t*)T4[temp[3].b[3]]));\r\n                            ^\r\naes_prng.c:783:28: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]\r\naes_prng.c:785:28: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]\r\n                            ^ *((uint32_t*)T2[temp[2].b[1]])\r\n                            ^\r\naes_prng.c:786:28: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]\r\n                            ^ *((uint32_t*)T3[temp[3].b[2]])\r\n                            ^\r\naes_prng.c:787:28: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]\r\n                            ^ *((uint32_t*)T4[temp[0].b[3]]));\r\n                            ^\r\naes_prng.c:787:28: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]\r\naes_prng.c:789:28: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]\r\n                            ^ *((uint32_t*)T2[temp[3].b[1]])\r\n                            ^\r\naes_prng.c:790:28: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]\r\n                            ^ *((uint32_t*)T3[temp[0].b[2]])\r\n                            ^\r\naes_prng.c:791:28: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]\r\n                            ^ *((uint32_t*)T4[temp[1].b[3]]));\r\n                            ^\r\naes_prng.c:791:28: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]\r\naes_prng.c:793:28: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]\r\n                            ^ *((uint32_t*)T2[temp[0].b[1]])\r\n                            ^\r\naes_prng.c:794:28: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]\r\n                            ^ *((uint32_t*)T3[temp[1].b[2]])\r\n                            ^\r\naes_prng.c:795:28: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]\r\n                            ^ *((uint32_t*)T4[temp[2].b[3]]));\r\n                            ^\r\naes_prng.c:795:28: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]\r\naes_prng.c:805:32: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]\r\n                                ^ *((uint32_t*)T2[temp[1].b[1]])\r\n                                ^\r\naes_prng.c:806:32: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]\r\n                                ^ *((uint32_t*)T3[temp[2].b[2]])\r\n                                ^\r\naes_prng.c:807:32: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]\r\n                                ^ *((uint32_t*)T4[temp[3].b[3]]));\r\n                                ^\r\naes_prng.c:807:32: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]\r\naes_prng.c:809:32: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]\r\n                                ^ *((uint32_t*)T2[temp[2].b[1]])\r\n                                ^\r\naes_prng.c:810:32: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]\r\n                                ^ *((uint32_t*)T3[temp[3].b[2]])\r\n                                ^\r\naes_prng.c:811:32: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]\r\n                                ^ *((uint32_t*)T4[temp[0].b[3]]));\r\n                                ^\r\naes_prng.c:811:32: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]\r\naes_prng.c:813:32: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]\r\n                                ^ *((uint32_t*)T2[temp[3].b[1]])\r\n                                ^\r\naes_prng.c:814:32: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]\r\n                                ^ *((uint32_t*)T3[temp[0].b[2]])\r\n                                ^\r\naes_prng.c:815:32: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]\r\n                                ^ *((uint32_t*)T4[temp[1].b[3]]));\r\n                                ^\r\naes_prng.c:815:32: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]\r\naes_prng.c:817:32: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]\r\n                                ^ *((uint32_t*)T2[temp[0].b[1]])\r\n                                ^\r\naes_prng.c:818:32: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]\r\n                                ^ *((uint32_t*)T3[temp[1].b[2]])\r\n                                ^\r\naes_prng.c:819:32: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]\r\n                                ^ *((uint32_t*)T4[temp[2].b[3]]));\r\n                                ^\r\naes_prng.c:819:32: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]\r\n```\r\nSome of them are easy/trivial to fix, some others require deeper restructuring. I'd like to use this bug report to discuss which warning could be fixed which way and close it when we have either fixed them all or come to an agreement regarding the remaining ones."},"comment":{"url":"https://api.github.com/repos/chocolate-doom/chocolate-doom/issues/comments/98699363","html_url":"https://github.com/chocolate-doom/chocolate-doom/issues/535#issuecomment-98699363","issue_url":"https://api.github.com/repos/chocolate-doom/chocolate-doom/issues/535","id":98699363,"user":{"login":"fabiangreffrath","id":6449237,"avatar_url":"https://avatars.githubusercontent.com/u/6449237?v=3","gravatar_id":"","url":"https://api.github.com/users/fabiangreffrath","html_url":"https://github.com/fabiangreffrath","followers_url":"https://api.github.com/users/fabiangreffrath/followers","following_url":"https://api.github.com/users/fabiangreffrath/following{/other_user}","gists_url":"https://api.github.com/users/fabiangreffrath/gists{/gist_id}","starred_url":"https://api.github.com/users/fabiangreffrath/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/fabiangreffrath/subscriptions","organizations_url":"https://api.github.com/users/fabiangreffrath/orgs","repos_url":"https://api.github.com/users/fabiangreffrath/repos","events_url":"https://api.github.com/users/fabiangreffrath/events{/privacy}","received_events_url":"https://api.github.com/users/fabiangreffrath/received_events","type":"User","site_admin":false},"created_at":"2015-05-04T12:59:09Z","updated_at":"2015-05-04T12:59:09Z","body":"I think we can remove this check: player->message is never \"false\", so !player->message is never \"true\"."}}