[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
project.

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

  configure.ac: Fix tzet typo for tzset
  <https://github.com/OpenSmalltalk/opensmalltalk-vm/pull/660>

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
 #endif
 } 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
prototype).

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)"
 #endif
 
+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).

Thanks,
Florian



More information about the Squeak-dev mailing list