Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

EU builds fail compilation in audio/external.c #541

Open
tsunamistate opened this issue Jan 13, 2024 · 2 comments
Open

EU builds fail compilation in audio/external.c #541

tsunamistate opened this issue Jan 13, 2024 · 2 comments

Comments

@tsunamistate
Copy link

Environment:

  • OS: Ubuntu 22.04.3 via WSL2
  • GCC: 11.4.0
  • bintutils-mips: 2.38
  • libcapstone-dev: 4.0.2-5

eu-1.0 and eu-final builds fail compilation when trying to compile src/audio/external.c
Error logs:

Compiling: src/audio/external.c -> build/eu-final/src/audio/external.o
src/audio/external.c: In function 'func_800C3478':
src/audio/external.c:1128:5: warning: statement with no effect [-Wunused-value]
 1128 |     for(D_800EA1E8; D_800EA1E4 != D_800EA1E8;) {
      |     ^~~
src/audio/external.c:1129:9: warning: implicit declaration of function 'func_800C2A2C'; did you mean 'func_8009CA2C'? [-Wimplicit-function-declaration]
 1129 |         func_800C2A2C(D_80192CD0[D_800EA1E8++]);
      |         ^~~~~~~~~~~~~
      |         func_8009CA2C
src/audio/external.c: In function 'func_800C357C':
src/audio/external.c:1147:18: warning: comparison of integer expressions of different signedness: 's32' {aka 'int'} and 'u32' {aka 'unsigned int'} [-Wsign-compare]
 1147 |         if (arg0 == D_80192CD0[i]) {
      |                  ^~
src/audio/external.c: In function 'func_800C357C_eu':
src/audio/external.c:1163:18: warning: comparison of integer expressions of different signedness: 's32' {aka 'int'} and 'u32' {aka 'unsigned int'} [-Wsign-compare]
 1163 |         if (arg0 == (D_80192CD0[i] & arg1)) {
      |                  ^~
src/audio/external.c: In function 'delete_sound_from_bank':
src/audio/external.c:1743:9: warning: unused variable 'stackPadding' [-Wunused-variable]
 1743 |     s32 stackPadding;
      |         ^~~~~~~~~~~~
src/audio/external.c: In function 'func_800C4FE4':
src/audio/external.c:2035:9: warning: unused variable 'cmd' [-Wunused-variable]
 2035 |     u32 cmd;
      |         ^~~
src/audio/external.c: In function 'func_800C550C':
src/audio/external.c:2136:26: warning: passing argument 2 of 'func_800C5384' makes pointer from integer without a cast [-Wint-conversion]
 2136 |         func_800C5384(i, arg0);
      |                          ^~~~
      |                          |
      |                          s32 {aka int}
src/audio/external.c:2098:34: note: expected 'f32 *' {aka 'float *'} but argument is of type 's32' {aka 'in'}
 2098 | void func_800C5384(u8 arg0, f32 *arg1) {
      |                             ~~~~~^~~~
src/audio/external.c: In function 'func_800C6108':
src/audio/external.c:2417:13: warning: the address of 'D_800E9EC4' will always evaluate as 'true' [-Waddres]
 2417 |         if (D_800E9EC4) {} // ?
      |             ^~~~~~~~~~
src/audio/external.c:2453:5: warning: this 'if' clause does not guard... [-Wmisleading-indentation]
 2453 |     if ((D_800E9EE4[playerId] > 0.5f) || (D_800E9EE4[playerId] < -0.5f))
      |     ^~
src/audio/external.c:2458:9: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'if'
 2458 |         D_800E9F7C[playerId].unk_0C = D_800E9EC4[playerId] + D_800E9ED4[playerId] + D_800E9F34[playerId];
      |         ^~~~~~~~~~
src/audio/external.c: At top level:
src/audio/external.c:2459:7: error: expected identifier or '(' before 'else'
 2459 |     } else {
      |       ^~~~
src/audio/external.c:2463:5: error: expected identifier or '(' before 'if'
 2463 |     if (D_800E9F7C[playerId].unk_0C < 0.0f) {
      |     ^~
src/audio/external.c:2467:5: error: expected identifier or '(' before 'if'
 2467 |     if (D_800E9F7C[playerId].unk_0C > 4.0f) {
      |     ^~
src/audio/external.c:2470:16: error: 'playerId' undeclared here (not in a function); did you mean 'Player'?
 2470 |     D_800E9EC4[playerId] = D_800E9F7C[playerId].unk_0C;
      |                ^~~~~~~~
      |                Player
src/audio/external.c:2470:5: warning: data definition has no type or storage class
 2470 |     D_800E9EC4[playerId] = D_800E9F7C[playerId].unk_0C;
      |     ^~~~~~~~~~
src/audio/external.c:2470:5: warning: type defaults to 'int' in declaration of 'D_800E9EC4' [-Wimplicit-int]
src/audio/external.c:2471:25: error: expected '=', ',', ';', 'asm' or '__attribute__' before '.' token
 2471 |     D_800E9F7C[playerId].unk_38 = (D_800E9F7C[playerId].unk_0C / 1.5f) + 0.4f;
      |                         ^
src/audio/external.c:2472:1: error: expected identifier or '(' before '}' token
 2472 | }
      | ^
src/audio/external.c: In function 'func_800C76C0':
src/audio/external.c:3005:29: error: break statement not within loop or switch
 3005 |                             break;
      |                             ^~~~~
src/audio/external.c:3007:21: error: break statement not within loop or switch
 3007 |                     break;
      |                     ^~~~~
src/audio/external.c:3008:17: error: case label not within a switch statement
 3008 |                 case BATTLE:
      |                 ^~~~
src/audio/external.c:3038:21: error: break statement not within loop or switch
 3038 |                     break;
      |                     ^~~~~
src/audio/external.c:3039:17: error: 'default' label not within a switch statement
 3039 |                 default:
      |                 ^~~~~~~
src/audio/external.c:3040:21: error: break statement not within loop or switch
 3040 |                     break;
      |                     ^~~~~
src/audio/external.c: At top level:
src/audio/external.c:3043:9: error: expected identifier or '(' before 'if'
 3043 |         if (D_800E9EA4[playerId] == 0x0000001E) {
      |         ^~
src/audio/external.c:3076:9: error: expected identifier or '(' before 'switch'
 3076 |         switch (gModeSelection) {                        /* switch 4; irregular */
      |         ^~~~~~
src/audio/external.c:3138:5: error: expected identifier or '(' before '}' token
 3138 |     }
      |     ^
src/audio/external.c:3139:1: error: expected identifier or '(' before '}' token
 3139 | }
      | ^
src/audio/external.c: In function 'func_800C9060':
src/audio/external.c:3378:88: warning: pointer targets in passing argument 6 of 'play_sound' differ in signedness [-Wpointer-sign]
 3378 |                 play_sound(arg1, D_800E9F7C[arg0].pos, arg0, &D_800EA1D4, &D_800EA1D4, &D_800E9F7C[arg0].unk_14);
      |                                                                                        ^~~~~~~~~~~~~~~~~~~~~~~~
      |                                                                                        |
      |                                                                                        s8 * {aka signed char *}
src/audio/external.c:1522:82: note: expected 'u8 *' {aka 'unsigned char *'} but argument is of type 's8 *' {aka 'signed char *'}
 1522 | void play_sound(u32 soundBits, f32 *position, u8 arg2, f32 *arg3, f32 *arg4, u8 *arg5) {
      |                                                                              ~~~~^~~~
src/audio/external.c: In function 'func_800C9D0C':
src/audio/external.c:3609:19: warning: passing argument 1 of 'func_800C550C' makes integer from pointer without a cast [-Wint-conversion]
 3609 |     func_800C550C(func_800C21E8(gPlayers[playerId].pos, gPlayers[playerId].characterId + 0x31028000);
      |                   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      |                   |
      |                   f32 * {aka float *}
src/audio/external.c:2130:24: note: expected 's32' {aka 'int'} but argument is of type 'f32 *' {aka 'float '}
 2130 | void func_800C550C(s32 arg0) {
      |                    ~~~~^~~~
src/audio/external.c: In function 'func_800CA984':
src/audio/external.c:3857:45: warning: passing argument 2 of 'func_800C1C88' from incompatible pointer type [-Wincompatible-pointer-types]
 3857 |             temp_v0_2 = func_800C1C88(arg0, &gPlayers[arg0].pos, D_800EA1C8, &gPlayers[arg0].unk_098, (u8) i, 0x31029008U);
      |                                             ^~~~~~~~~~~~~~~~~~~
      |                                             |
      |                                             f32 (*)[3] {aka float (*)[3]}
In file included from src/audio/external.c:6:
src/audio/external.h:200:40: note: expected 'f32 *' {aka 'float *'} but argument is of type 'f32 (*)[3]' {aka 'float (*)[3]'}
  200 | struct Unk_8018EFD8 *func_800C1C88(u8, Vec3f, Vec3f, f32*, u8, u32);
      |                                        ^~~~~
src/audio/external.c: In function 'func_800CAB4C':
src/audio/external.c:3873:8: warning: unused variable 'temp_v0' [-Wunused-variable]
 3873 |     u8 temp_v0;
      |        ^~~~~~~
src/audio/external.c:3872:9: warning: unused variable 'temp_v1' [-Wunused-variable]
 3872 |     u8 *temp_v1;
      |         ^~~~~~~
make: *** [Makefile:571: build/eu-final/src/audio/external.o] Error 1

us version compiles without errors
The error is the same for both eu-1.0 and eu-final

@alyxdeburca
Copy link
Contributor

After giving the code a (cursory) read, I'm struggling too see what the issue is to be honest. @MegaMech do you see anything in the code that could be an issue? I'll take another look once I'm finished work if you don't. Could be some strange compiler bug

@MegaMech
Copy link
Collaborator

I think we have a syntax error in the code wherein building US does not fail because the bad syntax is behind an ifdef.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants