Tcl Source Code

View Ticket
Login
Ticket UUID: 1dcda0e862a79254fc1188f49848666b9490e991
Title: Build broken (trunk branch) tclCompExpr.c tclOOCall.c
Type: Bug Created on: 2025-05-24 08:31:52
Submitter: fvogel Assigned to: jan.nijtmans
Subsystem: None Severity: Severe
Priority: 5 Medium Last modified: 2025-05-26 11:51:58
Status: Closed Closed by: jan.nijtmans
Resolution: Fixed Closed on: 2025-05-26 11:51:58
Version: trunk, core-9-0-branch
Description:

Building Tcl trunk branch on Windows with MSVC 2022 spits:

tclCompCmdsSZ.c
tclCompExpr.c
C:\Users\francois\Documents\Development\tcltk-fossil\tcl\win\..\generic\tclCompExpr.c(175): error C2220: l'avertissement suivant est traité comme une erreur
C:\Users\francois\Documents\Development\tcltk-fossil\tcl\win\..\generic\tclCompExpr.c(175): warning C5287: les opérandes sont des types enum différents « LexemeTypes » et « LexemeCodes » ; utilisez un forçage de type explicite pour mettre cet avertissement en sourdine
C:\Users\francois\Documents\Development\tcltk-fossil\tcl\win\..\generic\tclCompExpr.c(175): note: pour simplifier la migration, utilisez temporairement l'indicateur /Wv:18 avec la version du compilateur que vous avez utilisé pour générer sans avertissement
C:\Users\francois\Documents\Development\tcltk-fossil\tcl\win\..\generic\tclCompExpr.c(185): warning C5287: les opérandes sont des types enum différents « LexemeTypes » et « LexemeCodes » ; utilisez un forçage de type explicite pour mettre cet avertissement en sourdine
C:\Users\francois\Documents\Development\tcltk-fossil\tcl\win\..\generic\tclCompExpr.c(185): note: pour simplifier la migration, utilisez temporairement l'indicateur /Wv:18 avec la version du compilateur que vous avez utilisé pour générer sans avertissement
C:\Users\francois\Documents\Development\tcltk-fossil\tcl\win\..\generic\tclCompExpr.c(186): warning C5287: les opérandes sont des types enum différents « LexemeTypes » et « LexemeCodes » ; utilisez un forçage de type explicite pour mettre cet avertissement en sourdine
C:\Users\francois\Documents\Development\tcltk-fossil\tcl\win\..\generic\tclCompExpr.c(186): note: pour simplifier la migration, utilisez temporairement l'indicateur /Wv:18 avec la version du compilateur que vous avez utilisé pour générer sans avertissement
C:\Users\francois\Documents\Development\tcltk-fossil\tcl\win\..\generic\tclCompExpr.c(187): warning C5287: les opérandes sont des types enum différents « LexemeTypes » et « LexemeCodes » ; utilisez un forçage de type explicite pour mettre cet avertissement en sourdine
C:\Users\francois\Documents\Development\tcltk-fossil\tcl\win\..\generic\tclCompExpr.c(187): note: pour simplifier la migration, utilisez temporairement l'indicateur /Wv:18 avec la version du compilateur que vous avez utilisé pour générer sans avertissement
C:\Users\francois\Documents\Development\tcltk-fossil\tcl\win\..\generic\tclCompExpr.c(218): warning C5287: les opérandes sont des types enum différents « LexemeTypes » et « LexemeCodes » ; utilisez un forçage de type explicite pour mettre cet avertissement en sourdine
C:\Users\francois\Documents\Development\tcltk-fossil\tcl\win\..\generic\tclCompExpr.c(218): note: pour simplifier la migration, utilisez temporairement l'indicateur /Wv:18 avec la version du compilateur que vous avez utilisé pour générer sans avertissement
C:\Users\francois\Documents\Development\tcltk-fossil\tcl\win\..\generic\tclCompExpr.c(219): warning C5287: les opérandes sont des types enum différents « LexemeTypes » et « LexemeCodes » ; utilisez un forçage de type explicite pour mettre cet avertissement en sourdine
C:\Users\francois\Documents\Development\tcltk-fossil\tcl\win\..\generic\tclCompExpr.c(219): note: pour simplifier la migration, utilisez temporairement l'indicateur /Wv:18 avec la version du compilateur que vous avez utilisé pour générer sans avertissement
Génération de code en cours...
Compilation en cours...
tclCompile.c
tclConfig.c

[...]

tclOOBasic.c
tclOOCall.c
C:\Users\francois\Documents\Development\tcltk-fossil\tcl\win\..\generic\tclOOCall.c(57): error C2220: l'avertissement suivant est traité comme une erreur
C:\Users\francois\Documents\Development\tcltk-fossil\tcl\win\..\generic\tclOOCall.c(57): warning C5287: les opérandes sont des types enum différents « TclOOCallChainFlags » et « ObjectFlags » ; utilisez un forçage de type explicite pour mettre cet avertissement en sourdine
C:\Users\francois\Documents\Development\tcltk-fossil\tcl\win\..\generic\tclOOCall.c(57): note: pour simplifier la migration, utilisez temporairement l'indicateur /Wv:18 avec la version du compilateur que vous avez utilisé pour générer sans avertissement
C:\Users\francois\Documents\Development\tcltk-fossil\tcl\win\..\generic\tclOOCall.c(1082): warning C5287: les opérandes sont des types enum différents « TclOOCallChainFlags » et « CallChainFlags » ; utilisez un forçage de type explicite pour mettre cet avertissement en sourdine
C:\Users\francois\Documents\Development\tcltk-fossil\tcl\win\..\generic\tclOOCall.c(1082): note: pour simplifier la migration, utilisez temporairement l'indicateur /Wv:18 avec la version du compilateur que vous avez utilisé pour générer sans avertissement
C:\Users\francois\Documents\Development\tcltk-fossil\tcl\win\..\generic\tclOOCall.c(1185): warning C5287: les opérandes sont des types enum différents « CallChainFlags » et « ObjectFlags » ; utilisez un forçage de type explicite pour mettre cet avertissement en sourdine
C:\Users\francois\Documents\Development\tcltk-fossil\tcl\win\..\generic\tclOOCall.c(1185): note: pour simplifier la migration, utilisez temporairement l'indicateur /Wv:18 avec la version du compilateur que vous avez utilisé pour générer sans avertissement
C:\Users\francois\Documents\Development\tcltk-fossil\tcl\win\..\generic\tclOOCall.c(1503): warning C5287: les opérandes sont des types enum différents « TclOOCallChainFlags » et « ObjectFlags » ; utilisez un forçage de type explicite pour mettre cet avertissement en sourdine
C:\Users\francois\Documents\Development\tcltk-fossil\tcl\win\..\generic\tclOOCall.c(1503): note: pour simplifier la migration, utilisez temporairement l'indicateur /Wv:18 avec la version du compilateur que vous avez utilisé pour générer sans avertissement
tclOODefineCmds.c
tclOOInfo.c

[...]

tclVar.c
Génération de code en cours...
NMAKE : fatal error U1077: 'cl -nologo -c   /DHAVE_CPUID=1 -W3 -wd4090 -wd4146 -wd4311 -wd4312 -WX -FpC:\Users\francois\Documents\Development\tcltk-fossil\tcl\win\Debug_AMD64_VC1944\tcl_Dynamic\ -Zi -Od  -fp:strict -RTC1 -MDd -I"C:\Users\francois\Documents\Development\tcltk-fossil\tcl\win\..\win" -I"C:\Users\francois\Documents\Development\tcltk-fossil\tcl\win\..\generic"  -I"C:\Users\francois\Documents\Development\tcltk-fossil\tcl\win\..\libtommath"  /DMP_PREC=4 /Dinline=__inline /D_CRT_SECURE_NO_DEPRECATE /D_CRT_NONSTDC_NO_DEPRECATE /DMP_FIXED_CUTOFFS /DSTDC_HEADERS /DUSE_NMAKE=1 /DHAVE_STDINT_H=1 /DHAVE_INTTYPES_H=1 /DHAVE_STDBOOL_H=1 /DTCL_WITH_EXTERNAL_TOMMATH /DMP_64BIT /DTCL_CFG_DO64BIT   /DBUILD_tcl -FoC:\Users\francois\Documents\Development\tcltk-fossil\tcl\win\Debug_AMD64_VC1944\tcl_Dynamic\ @C:\Users\francois\AppData\Local\Temp\nmAA18.tmp'á: code retour '0x2'
Stop.

(Sorry, error messages are in French).

Interestingly this does not seem to happen at Github CI.

In trunk the issue in tclCompExpr.c happens first with commit [47f9090e53].

In trunk the issue in tclOOCall.c happens first with commit [c6393caddb].

Strangely, these commits are several months old and I'm sure I have built Tcl trunk since these commits went in. Perhaps this is due to a yesterday's update of MSVC. I'm running MSVC 2022 64 biots version 17.14.2

User Comments:
apnadkarni added on 2025-05-25 16:30:07:
Strange. I build with VS 2022 too and do not see this. May depend on the revision. Mine is a little old.

fvogel added on 2025-05-25 16:56:44:

It really is a new warning from recent VS 2022 versions. And we're not alone:

https://bugs.openjdk.org/browse/JDK-8357193 : they disabled the warning.

https://fossil-scm.org/forum/forumpost/a5a992e657 : they changed their code.


jan.nijtmans added on 2025-05-26 11:51:58:

Fixed [a60bfcf236101794|here] by just disabling the warning.

Since MSVC is the only compiler spitting out this warning, and the code would only become uglier when adapting for this warning ....