On 3/28/23 02:12, Michalis Kamburelis via fpc-devel wrote:
Hi, We're experimenting with compiling Castle Game Engine using FPC WebAssembly target. A lot of units and classes compiled smoothly, however we hit a weird bug(s) at compiling our (big, too big!) unit X3DNodes. We get errors "Wasm32 symbol xxx without index value error" at the code trying to use various property setters or methods. Examples: x3dcamerautils.pas(344,0) Error: Wasm32 symbol X3DFIELDS$_$TSFROTATION_$__$$_SETVALUE$TGENERICVECTOR4 without index value error // where TSFRotation.Value is a property with record type, with getter and setter methods x3dcamerautils.pas(344,0) Error: Wasm32 symbol X3DFIELDS$_$TX3DSIMPLEMULTFIELD$3$CRCD1E2ED59_CRCAB5A7799_$__$$_GETITEMS$$TSINGLELIST without index value error // where TX3DSimpleMultField.GetItems is a method of a generic class) x3dcamerautils.pas(344,0) Error: Wasm32 symbol X3DFIELDS$_$TSFFLOAT_$__$$_SETVALUE$SINGLE without index value error x3dcamerautils.pas(344,0) Error: Wasm32 symbol // where TSFFloat.SetValue is a simple setter for a Single property, no generics castlescenecore.pas(8822,0) Error: Wasm32 symbol CASTLESHAPEINTERNALSHADOWVOLUMES$_$TSHAPESHADOWVOLUMES_$__$$_PREPARERESOURCES without index value error // where TShapeShadowVolumes.PrepareResources is a simple method, without any parameters, in a simple non-generic class Weirder, on another machine, the symbols reported contain some exe filenames at the place of initial "$_$" (maybe independent compiler bug at message display?): x3dloadinternalgeo.pas(234,0) Error: Wasm32 symbol X3DFIELDS/usr/bin/dbus-update-activation-environmentTSFFLOAT_$__$$_SETVALUE$SINGLE without index value error x3dloadinternalgeo.pas(234) Error: Wasm32 symbol X3DFIELDS/home/michalis/bin/castle-engineTSFFLOAT_$__$$_SETVALUE$SINGLE without index value error Sometimes the errors can be workarounded by some simple actions -- like moving the property getter/setter protected->private, or avoiding the call to that particular method. But the solutions, as well as causes, seem ~random from our perspective. And all in all, we didn't finish the compilation of X3DNodes unit because after each fix/workaround/hack for a specific case, another similar error pops up. Grepping FPC for the asmw_e_illegal_unset_index (this is "Wasm32 symbol $1 without index value error"), the error can occur when symbol cannot be found in the list where compiler expected it to be. We don't have any simple bugreport about it (yet), as the error really manifests only in a big unit, that is interconnected with a few other big units. Isolating the testcase (and/or doing much needed refactor of this unit :) ) will take a while. Does anyone have a hint: - What does this error really mean? What is internally wrong at compilation to cause it? What could be the culprit? - Is there some universal workaround for it (on CGE side) or fix on the compiler side? Even a vague hint could at least help us prepare an isolated bugreport, because otherwise we have a rather big chunk of code to dissect in order to provide a simple FPC testcase :)
Even a big unit is fine for a bug report, as long as all the code is publicly available for download. If you can't seem to get it to reproduce with a small test case, you can mention in the bug report that you tried, but didn't succeed and still provide the full code needed. AFAIK, the Castle Game Engine is open-source, so this shouldn't be a problem?
Nikolay
Regards, Michalis _______________________________________________ fpc-devel maillist - fpc-devel@lists.freepascal.org https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel
_______________________________________________ fpc-devel maillist - fpc-devel@lists.freepascal.org https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel