Skip to content

GCC 14.2(.1) compilation issues/errors (appstub.mod, io.mod ...) because of now required casts #332

@GWRon

Description

@GWRon

So I tried to compile on ArchLinux running a GCC 14.2.
(required an install of webkit2gtk to get MaxIDE running first).

Compiling a simple sample for now:

SuperStrict
Framework Brl.StandardIO

print "Hello World"

first error popping up is about some implicit declaration (because it does not find the function)

/home/ronny/Downloads/BlitzMax/mod/brl.mod/appstub.mod/appstub.linux.c: In Funktion »bmx_process_vm_readv«:
/home/ronny/Downloads/BlitzMax/mod/brl.mod/appstub.mod/appstub.linux.c:38:25: Fehler: Implizite Deklaration der Funktion »process_vm_readv«; meinten Sie »bmx_process_vm_readv«? [-Wimplicit-function-declaration]
   38 |         size_t result = process_vm_readv(pid, &local, 1, &remote, 1, 0);
      |                         ^~~~~~~~~~~~~~~~
      |                         bmx_process_vm_readv

I simply prepended #define _GNU_SOURCE to "brl.mod/appstub.mod/appstub.linux.c" to fix that.

next error is something which thrown a lot (I for now stopped trying to "fix" things as I am not sure if it is even correct what I do - or if it just removes the warning but breaks the code :D)

Sample error:

/home/ronny/Downloads/BlitzMax/mod/brl.mod/appstub.mod/debugger.stdio.glue.c: In Funktion »bmx_debugger_DebugDeclNext«:
/home/ronny/Downloads/BlitzMax/mod/brl.mod/appstub.mod/debugger.stdio.glue.c:33:31: Fehler: Rückgabe von »char *« aus einer Funktion mit inkompatiblem Rückgabetyp »struct BBDebugDecl *« [-Wincompatible-pointer-types]
   33 |         return ((char *)decl) + sizeof(struct BBDebugDecl);
      |                ~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~

Which I fixes with:

struct BBDebugDecl * bmx_debugger_DebugDeclNext( struct BBDebugDecl * decl ) {
    //OLD: return ((char *)decl) + sizeof(struct BBDebugDecl);
    return (struct BBDebugDecl *)(((char *)decl) + sizeof(struct BBDebugDecl));
}

As said similar needs to be done in other files (eg blitz_app.c):

	//OLD: bbGCStackTop=ebp+28;
	bbGCStackTop = (void **)(ebp + 28);

It also affects stuff like physfs (io.mod) - but I think there the error can be fixed differently - there the first element of a char array pointer was tried to be assigned to a char pointer. Without the ampersand C should (according to the internet :D) already return the first element (so a char pointer here):

int bmx_PHYSFS_setRoot(BBString * archive, BBString * subdir) {
	char abuf[1024];
	size_t len = 1024;
	bbStringToUTF8StringBuffer(archive, abuf, &len);

	char sbuf[1024];
	size_t slen = 1024;

	char * sd = 0;
	if (subdir != &bbEmptyString) {
		bbStringToUTF8StringBuffer(subdir, sbuf, &slen);
		//OLD: sd = &sbuf;
		//not needed to &... because name of arrays already point to first element
		sd = sbuf;
	}

	return PHYSFS_setRoot(abuf, sbuf);
}

Is it worth to try "fixing it on my own" or is it not correct what I am doing here?
Maybe just adding the compiler flag to ignore these things should do (plus the #define-line ...)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions