Eliot,

thanks for the help.

There was another warning turned into error since clang 15, that was also solved by turning the error in a warning. :


/home/edwin/Squeak/opensmalltalk-vm/platforms/unix/plugins/SoundPlugin/sqUnixSound.c:194:62: error: incompatible integer to pointer conversion returning 'int' from a function with result type 'char *' [-Wint-conversion]
char *getDefaultSoundPlayer(void)                   { return -1; }
                                                             ^~
/home/edwin/Squeak/opensmalltalk-vm/platforms/unix/plugins/SoundPlugin/sqUnixSound.c:195:62: error: incompatible integer to pointer conversion returning 'int' from a function with result type 'char *' [-Wint-conversion]
char *getDefaultSoundRecorder(void)                 { return -1; }
                                                             ^~
/home/edwin/Squeak/opensmalltalk-vm/platforms/unix/plugins/SoundPlugin/sqUnixSound.c:196:62: error: incompatible integer to pointer conversion returning 'int' from a function with result type 'char *' [-Wint-conversion]
char *getSoundPlayerDeviceName(sqInt i)             { return -1; }
                                                             ^~
/home/edwin/Squeak/opensmalltalk-vm/platforms/unix/plugins/SoundPlugin/sqUnixSound.c:197:62: error: incompatible integer to pointer conversion returning 'int' from a function with result type 'char *' [-Wint-conversion]
char *getSoundRecorderDeviceName(sqInt i)           { return -1; }
                                                             ^~
4 errors generated.

But now I have the following, which I see no way  to solve:

/home/edwin/Squeak/opensmalltalk-vm/platforms/unix/vm-sound-ALSA/sqUnixSoundALSA.c:951:13: error: redefinition of 'devname' as different kind of symbol
static char devname[MAX_NAME_LEN];
            ^
/usr/include/stdlib.h:289:7: note: previous definition is here
char    *devname(__dev_t, __mode_t);

Any help is welcome....

Edwin Ancaer
Op vr 1 mrt 2024 om 07:17 schreef Eliot Miranda <eliot.miranda@gmail.com>:
Hi Edwin,

On Thu, Feb 29, 2024 at 3:10 PM Edwin Ancaer <eancaer@gmail.com> wrote:

Hello,

I recently upgraded to FreeBSD 14, with clang version 'FreeBSD clang version 16.0.6 (https://github.com/llvm/llvm-project.git llvmorg-16.0.6-0-g7cbf1a259152)'

If I understand correctly, Clang promoted some warnings to errors and in special the warning Wincompatible-function-pointer-types. It looks as if this prevents me to compile the linux-cog-spur virtual machine:

clang -Wall  -g -O2 -DNDEBUG -DDEBUGVM=0 -msse2 -DCOGMTVM=0 -pthread -DLSB_FIRST=1 -m64 -Wno-missing-braces -Wno-unknown-pragmas -Wno-unused-value -Wno-unused-label -Wno-unused-function -Wno-unused-variable -Wno-unused-but-set-variable  -DHAVE_CONFIG_H  -DSQUEAK_BUILTIN_PLUGIN  -I/home/edwin/Squeak/opensmalltalk-vm/building/linux64x64/squeak.cog.spur/build -I/home/edwin/Squeak/opensmalltalk-vm/building/linux64x64/squeak.cog.spur/build -I/home/edwin/Squeak/opensmalltalk-vm/platforms/unix/vm -I/home/edwin/Squeak/opensmalltalk-vm/platforms/Cross/vm -I/home/edwin/Squeak/opensmalltalk-vm/src/spur64.cog -I/home/edwin/Squeak/opensmalltalk-vm/platforms/Cross/vm -I/home/edwin/Squeak/opensmalltalk-vm/platforms/unix/vm -I/home/edwin/Squeak/opensmalltalk-vm/src/spur64.cog   -I/home/edwin/Squeak/opensmalltalk-vm/platforms/Cross/plugins/FilePlugin  -I/home/edwin/Squeak/opensmalltalk-vm/platforms/unix/plugins/B3DAcceleratorPlugin -m64 -Wno-missing-braces -Wno-unknown-pragmas -Wno-unused-value -Wno-unused-label -Wno-unused-function -Wno-unused-variable -Wno-unused-but-set-variable   -c -o sqUnixMain.o /home/edwin/Squeak/opensmalltalk-vm/platforms/unix/vm/sqUnixMain.c
/home/edwin/Squeak/opensmalltalk-vm/platforms/unix/vm/sqUnixMain.c:1832:10: warning: format string is not a string literal (potentially insecure) [-Wformat-security]
                printf(optionStrings[count]);
                       ^~~~~~~~~~~~~~~~~~~~
/home/edwin/Squeak/opensmalltalk-vm/platforms/unix/vm/sqUnixMain.c:1832:10: note: treat the string as an argument to avoid this
                printf(optionStrings[count]);
                       ^
                       "%s",
/home/edwin/Squeak/opensmalltalk-vm/platforms/unix/vm/sqUnixMain.c:2324:38: error: incompatible function pointer types assigning to 'void (*)(int, struct __siginfo *, void *)' from 'void (int, siginfo_t *, ucontext_t *)' (aka 'void (int, struct __siginfo *, struct __ucontext *)') [-Wincompatible-function-pointer-types]
        sigsegv_handler_action.sa_sigaction = sigsegv;
                                            ^ ~~~~~~~
/home/edwin/Squeak/opensmalltalk-vm/platforms/unix/vm/sqUnixMain.c:2331:38: error: incompatible function pointer types assigning to 'void (*)(int, struct __siginfo *, void *)' from 'void (int, siginfo_t *, ucontext_t *)' (aka 'void (int, struct __siginfo *, struct __ucontext *)') [-Wincompatible-function-pointer-types]
        sigusr1_handler_action.sa_sigaction = sigusr1;
                                            ^ ~~~~~~~
1 warning and 2 errors generated.
*** Error code 1

Stop.
make[1]: stopped in /home/edwin/Squeak/opensmalltalk-vm/building/linux64x64/squeak.cog.spur/build/vm
*** Error code 1

Stop.
make: stopped in /home/edwin/Squeak/opensmalltalk-vm/building/linux64x64/squeak.cog.spur/build
[edwin@ottopedi ~/Squeak/opensmalltalk-vm/building/linux64x64/squeak.cog.spur/build]$

If my assumption is correct, the 'solution seems to downgrade the error to a warning with a compiler option:   -Wno-error=, but I have no idea how to do this in the whole configuration and compilation process.
Can someone tell how this should be done, or is it better to signal this as an error and wait until it gets corrected.

Ugh, this is such an annoying warning, and now error.  Why isn't there a define for the type of sa_sigaction so that one can cast a function to it?  I've been looking for an acceptable cross-platform way to eliminate the warning for years.  I'm open to any suggestion.  As far as adding -Wno-error=incompatible-function-pointer-types, can't you do it by making a build directory that contains an mvm file that adds it to the compiler command line? You could add, say, building/freebsd64x64/squeak.cog.spur/{build,buildast,builddbg} can't mvms that contain

CFLAGS="$CFLAGS -I/usr/local/include -Wno-error=incompatible-function-pointer-types"

or you could extend the existing linux64x64 mvms with a test for clang, etc.  But basically the mvm is the most convenient place to add hacks like this, and the building directory is a convenient place to put configuration files that hack around annoying issues like this.


Kind regards


Good luck man!

_,,,^..^,,,_
best, Eliot