[squeak-dev] Building with a strict(er) C99 compiler

Florian Weimer fweimer at redhat.com
Wed Nov 30 19:41:03 UTC 2022

* tim Rowledge:

>> On 2022-11-30, at 12:56 AM, Florian Weimer <fweimer at redhat.com> wrote:
>> Is Fedora using outdated sources?
> Yes, very much so. Just like Debian etc. PhilB was working on solving
> the problem but ran out of time and so far nobody has been able to
> take up the challenge.

Should I propose to retire the Fedora package (i.e., remove it from
future Fedora releases)?  It's really ancient, and I'm worried we do the
community a disservice here by misrepresenting the current state of the

Anyway, I built the real sources with the instrumented compiler and

  configure.ac: Fix tzet typo for tzset

and it already got merged.  Thanks!

I found a couple of other places where implicit function declarations
were involved, but don't really know what to do with these.

diff --git a/platforms/Cross/plugins/Mpeg3Plugin/libmpeg/video/slice.h b/platforms/Cross/plugins/Mpeg3Plugin/libmpeg/video/slice.h
index d21984e0c..2726be3cb 100755
--- a/platforms/Cross/plugins/Mpeg3Plugin/libmpeg/video/slice.h
+++ b/platforms/Cross/plugins/Mpeg3Plugin/libmpeg/video/slice.h
@@ -44,6 +44,8 @@ typedef struct
 } mpeg3_slice_t;
+void mpeg3_slice_loop(mpeg3_slice_t *slice);
 #define mpeg3slice_fillbits(buffer, nbits) \
 	while(((mpeg3_slice_buffer_t*)(buffer))->bits_size < (nbits)) \
 	{ \

That is probably an okay as a fix?

diff --git a/platforms/unix/plugins/DropPlugin/sqUnixDragDrop.c b/platforms/unix/plugins/DropPlugin/sqUnixDragDrop.c
index 5a68ec982..ddd733dc8 100644
--- a/platforms/unix/plugins/DropPlugin/sqUnixDragDrop.c
+++ b/platforms/unix/plugins/DropPlugin/sqUnixDragDrop.c
@@ -42,6 +42,8 @@
 #include "FilePlugin.h"
 #include "DropPlugin.h"
+extern usqIntptr_t fileRecordSize(void);
 extern struct VirtualMachine  *interpreterProxy;
 extern int						uxDropFileCount;
 extern char					  **uxDropFileNames;

This is way more questionable.  I couldn't find the right header for
this declaration.

diff --git a/platforms/unix/vm-display-X11/sqUnixX11.c b/platforms/unix/vm-display-X11/sqUnixX11.c
index 09b3f03f9..a07377ee9 100644
--- a/platforms/unix/vm-display-X11/sqUnixX11.c
+++ b/platforms/unix/vm-display-X11/sqUnixX11.c
@@ -4144,7 +4144,9 @@ void initPixmap(void)
 	for (b= 0; b < 6; b++)
 	    int i= 40 + ((36 * r) + (6 * b) + g);
-	    if (i > 255) error("index out of range in color table compuation");
+	    if (i > 255)
+	      fprintf(stderr,
+		      "index out of range in color table compuation\n");
 	    initColourmap(i, (r * 65535) / 5, (g * 65535) / 5, (b * 65535) / 5);

I think the call goes to the error function in
platforms/unix/vm/sqUnixMain.c, but its name is unfortunate because it
interposes the function of the same name in glibc (which as a different

diff --git a/src/plugins/XDisplayControlPlugin/XDisplayControlPlugin.c b/src/plugins/XDisplayControlPlugin/XDisplayControlPlugin.c
index 64c384ba6..48372180f 100644
--- a/src/plugins/XDisplayControlPlugin/XDisplayControlPlugin.c
+++ b/src/plugins/XDisplayControlPlugin/XDisplayControlPlugin.c
@@ -33,6 +33,10 @@ static char __buildInfo[] = "XDisplayControlPlugin VMConstruction-Plugins-XDispl
 # define INT_EXT "(e)"
+void openXDisplay(void);
+void forgetXDisplay(void);
+void synchronizeXDisplay(void);
+void disconnectXDisplay(void);
 /*** Function Prototypes ***/
 EXPORT(const char*) getModuleName(void);

This is obviously the wrong fix because it's in generated code, but it
gets the build to pass.

The logged errors are:

…/platforms/Cross/plugins/Mpeg3Plugin/libmpeg/video/getpicture.c:695: implicit function declaration: mpeg3_slice_loop
…/platforms/unix/plugins/DropPlugin/sqUnixDragDrop.c:120: implicit function declaration: fileRecordSize
…/platforms/unix/vm-display-X11/sqUnixX11.c:4147: implicit function declaration: error
…/src/plugins/XDisplayControlPlugin/XDisplayControlPlugin.c:188: implicit function declaration: forgetXDisplay
…/src/plugins/XDisplayControlPlugin/XDisplayControlPlugin.c:200: implicit function declaration: synchronizeXDisplay
…/src/plugins/XDisplayControlPlugin/XDisplayControlPlugin.c:259: implicit function declaration: disconnectXDisplay
…/src/plugins/XDisplayControlPlugin/XDisplayControlPlugin.c:284: implicit function declaration: openXDisplay

You should be able to replicate this with unpatched GCC by building with
-Werror=implicit-function-declaration.  The instrumentation is only
really needed for cases where errors do not fail the build and tend to
be hidden (such as configure scripts).


More information about the Squeak-dev mailing list