CI tests on Windows?

During yesterday’s maintainers meeting, we briefly talked about missing (automated) CI tests on Windows.
GitHub allows to run actions on Windows Server 2016 or Windows Server 2019 (on runners they provide).
The runners are too small to setup a complete (native) MXE Octave build. (And afaict no one is building Octave natively on Windows atm.)
But it might be possible to download a nightly from @siko1056’s buildbot farm and have the test suite run on a scheduled action. (Maybe once daily or less often?)

Afaics, the download links are generated from hg id and build time. That makes it difficult to have automated downloads.

Would it be possible to have symlinks on the server that always point to the latest version? Maybe something like https://www.octave.space/data/stable/latest/octave-default-w64.7z.

It could also be useful to have a small file that we could download to check if a newer version is available? Maybe a text file that contains the build date (and time)? E.g. a file at https://www.octave.space/data/stable/latest/build-date that could contain 2021-05-26-00-28 or something similar.
That might allow to skip the remainder of the action if no new version is available since the last run…

1 Like

This project sounds interesting and is probably not super complicated to implement in the build rules of “my” Buildbots.

If you don’t want to wait for me, there is already a “cleaner” way to get the desired data from “my” Buildbot, using the REST API 3.4. REST API — Buildbot latest documentation.

For example, if your MS Windows project can parse JSON data (via Python or the scripting language you use to download and start the build), two API calls get you all the data you want:

  • The last successful build of “octave-stable”
    https://buildbot.octave.space/api/v2/builders/octave/builds?state_string__eq=build%20successful&order=-started_at&limit=1

    {
    "builds": [
      {
        "builderid": 8,
        "buildid": 615,
        "buildrequestid": 586,
        "complete": true,
        "complete_at": 1621989500,
        "masterid": 72,
        "number": 109,
        "properties": {},
        "results": 0,
        "started_at": 1621987200,
        "state_string": "build successful",
        "workerid": 9
      }
    ],
    "meta": {
      "total": 1
    }
    }
    
    • buildid=615 is the ID that gets you much more information about the build, for example the OCTAVE_HG_ID to get the download URL (see below the second REST API call)
    • started_at contains the UNIX timestamp you can compare if it is newer than your last build
  • https://buildbot.octave.space/api/v2/builds/615/properties

    {
    "meta": {},
    "properties": [
      {
        "OCTAVE_HG_ID": [
          "096523ffd20d",
          "SetPropertyFromCommand Step"
        ],
        "OCTAVE_VERSION": [
          "6.2.1",
          "SetPropertyFromCommand Step"
        ],
        "branch": [
          "stable",
          "Build"
        ],
        "builddir": [
          "/buildbot/octave",
          "Worker"
        ],
        "buildername": [
          "octave",
          "Builder"
        ],
        "buildnumber": [
          109,
          "Build"
        ],
        "codebase": [
          "",
          "Build"
        ],
        "got_revision": [
          "096523ffd20d006061fcb92262d6aacb122b33cf",
          "Mercurial"
        ],
        "owners": [
          [
            "Pantxo Diribarne <pantxo.diribarne@gmail.com>"
          ],
          "Build"
        ],
        "project": [
          "octave repo",
          "Build"
        ],
        "repository": [
          "https://hg.savannah.gnu.org/hgweb/octave",
          "Build"
        ],
        "revision": [
          "096523ffd20d006061fcb92262d6aacb122b33cf",
          "Build"
        ],
        "scheduler": [
          "daily octave",
          "Scheduler"
        ],
        "workername": [
          "ubuntu-2004-worker-02",
          "Worker"
        ]
      }
    ]
    }
    

Thanks.

I added a preliminary workflow for this here:

This might not be the most elegant solution. And there are still no rules that would check if the bundle on the server is actually newer than the last one we tested with. But I’m happy it’s at least running now.

1 Like

Wow your project turned out much easier than I dared to imagine, great work @mmuetzel :grin: :+1:

As the Buildbot REST API approach seems to satisfy the needs, I will for now not create those “latest” soft links on my Buildbots? :innocent:

Well. I took the approach of “least-resistance” and tried to match the necessary strings in the JSON and HTML from the server with regular expressions using grep. I’m not sure how stable the “layout” of these strings will be.
I’m also not sure what will happen if multiple builds will end up in the same directory. (Can this ever happen? E.g. if mxe-octave gets an update but the stable branch of the octave repository doesn’t?)
But for now, it seems to do something at least.

For testing, I added the workflow to the Octave repository. I’m wondering if this is a good location for it. The workflow doesn’t really apply to the content of the repository at the revision it will be run. Instead, it might be better to add it to the buildbot repository or have it in a separate repository.
What do you think?

IIRC, Tatsuro was compiling Octave natively on Windows using the msys2 shell that is included in the MXE Octave bundle. I can’t recall if that was successful.
The msys2 shell can be installed on the GitHub Windows runners. Maybe we could add a native build rule after all. But I’ll try that locally first (when I come around to it and if no one else beats me to it).

The Buildbot software and REST API seems to have matured. As soon as the MS Windows builds are failing, I think a not overly complicated analysis of the problem will reveal necessary fixes.

Yes, recently it became possible and probably another change on my Buildbots is necessary :sweat: This is a side effect of having multiple triggers and violates my assumption for choosing the Octave hg-id as primary key (e.g. 096523ffd20d in https://www.octave.space/data/stable/096523ffd20d/) for storing the builds.

To solve this I can think of this:

  1. If Octave hg-id exist, flush directory and rebuild
    • Pro: Octave hg-id remains primary key
    • Con: No comparison between only mxe-changes in builds (might be helpful for debugging).
  2. Use another candidate key
    • Octave hg-id + MXE hg-id (very long :sweat: )
    • Octave hg-id + BuildID
    • Only the BuildID :thinking: (for my Buildbot system unique and much shorter :sweat_smile: )

What do you think?

Probably a separate repository is better. The workflow you created is great, on the other hand it contains lots of assumptions, including external services only I have access too (vendor lock in). For the Octave development repository I favor less external dependencies (for the GitHub actions dependency, I assume this service to be way more reliable than what I created in my free time and it provides further documentation, how Octave can be build on different platforms).

Probably Tatsuros’ approach, a native MS Windows build, will be easier defined for GitHub actions.

I’d rather not flush previous builds. It might be useful to have the previous ones if we’d like to “bisect” after a breaking change or something similar.

Is the buildid unique across all builders or at least different for each run? In that case, it might be just what we’d need.
Are you re-building the tarball also in the case where only the mxe-octave repository changed (but the octave stable branch did not)?

Sorry I extended my previous answer.

Yes, the buildid of Buildbot system is unique. Looking back on my system design, this might have been the better choice. That change will take a little longer, thus for now we just hope that enough changes on the stable branch happen :sweat_smile:

Yes.

I experimented a little bit with compiling Octave natively on Windows with the MSYS2 MinGW (64bit) shell.
Here is what works so far.

I installed the following msys2 packages:

pacman -S base-devel mingw-w64-x86_64-toolchain mingw-w64-x86_64-lapack mingw-w64-x86_64-openblas mingw-w64-x86_64-pcre
pacman -S mingw-w64-x86_64-arpack mingw-w64-x86_64-curl mingw-w64-x86_64-cvode mingw-w64-x86_64-fftw mingw-w64-x86_64-fltk mingw-w64-x86_64-gl2ps mingw-w64-x86_64-glpk mingw-w64-x86_64-ghostscript mingw-w64-x86_64-gnuplot mingw-w64-x86_64-graphicsmagick mingw-w64-x86_64-hdf5 mingw-w64-x86_64-libsndfile mingw-w64-x86_64-portaudio mingw-w64-x86_64-qhull mingw-w64-x86_64-qrupdate mingw-w64-x86_64-qscintilla mingw-w64-x86_64-qt5 mingw-w64-x86_64-rapidjson mingw-w64-x86_64-suitesparse
pacman -S libutil-linux-devel
pacman -S ccache git mercurial mingw-w64-x86_64-icoutils mingw-w64-x86_64-librsvg texinfo

Configured like this:

../configure CC="ccache x86_64-w64-mingw32-gcc" CXX="ccache x86_64-w64-mingw32-g++" F77="ccache x86_64-w64-mingw32-gfortran" PORTAUDIO_LDFLAGS="-L/mingw64/lib -L/usr/lib" --disable-docs ac_cv_search_tputs=-ltermcap

And built like this:

make all -j8 FLTK_LIBS="-lfltk_gl -lopengl32 -lglu32 -lfltk -lpthread" PERL5SHELL="bash -l -c"

I don’t know how to install a working TeX environment with msys2. That’s why I disabled building the documentation.
PortAudio adds -luuid to the linker flags. That library is installed in /usr/lib by msys2. That path is missing from the linker flags in PortAudio’s pkg-config file in MSYS2.
MSYS2’s fltk-config returns linker flags that include -lGL -lGLU. Those libraries don’t exist on Windows. We need to link with -lopengl32 -lglu32 instead.
Perl uses the cmd shell by default on Windows for commands in backticks. But we need it to use bash to pick up makeinfo.

With those settings, compilation succeeds without error (or warnings afaict). However, Octave doesn’t work correctly:

  • Running ./run-octave returns immediately. No error.
  • Running ./run-octave -cli shows the Octave prompt. But CPU load for the corresponding process is 100%. Only way to stop it is Ctrl+C.
  • Running ./run-octave -cli --no-line-editing seems to work to a degree. So, there might be an issue with readline on that platform.
    But whenever a function tries to use paths with \ as the file separator, it fails.
  • make check V=1 fails with the following error:
./src/mkoctfile --mex -I../libinterp/corefcn -Ilibinterp/corefcn -L./libinterp/.lib -L./liboctave/.lib -v ../test/mex/bug_51725.c -o test/mex/bug_51725.mex || rm -f test/mex/bug_51725.mex
ccache x86_64-w64-mingw32-gcc -c -I/mingw64/include  -I\mingw64\include\octave-7.0.0\octave/.. -I\mingw64\include\octave-7.0.0\octave -I\mingw64\include   -fopenmp -g -O2   -I. -I../libinterp/corefcn -Ilibinterp/corefcn  -DMEX_DEBUG ../test/mex/bug_51725.c -o C:\msys64\tmp/oct-LuoEnU.o
ccache x86_64-w64-mingw32-g++ -I\mingw64\include\octave-7.0.0\octave/.. -I\mingw64\include\octave-7.0.0\octave -I\mingw64\include   -fopenmp -g -O2  -o test/mex/bug_51725.mex  C:\msys64\tmp/oct-LuoEnU.o  -L./libinterp/.lib -L./liboctave/.lib -shared -L\mingw64\lib\octave\7.0.0 -L\mingw64\lib -shared  -L\mingw64\lib\octave\7.0.0 -L\mingw64\lib -shared -L\mingw64\lib\octave\7.0.0 -loctinterp -loctave
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe: cannot find -loctinterp
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe: cannot find -loctave
collect2.exe: error: ld returned 1 exit status

If I modify the commands to look like the following and run them manually, they succeed:

 ccache x86_64-w64-mingw32-gcc -c -I/mingw64/include  -I\mingw64\include\octave-7.0.0\octave\.. -I\mingw64\include\octave-7.0.0\octave -I\mingw64\include   -fopenmp -g -O2   -I. -I../libinterp/corefcn -Ilibinterp/corefcn  -DMEX_DEBUG ../test/mex/bug_54096.c -o C:/msys64/tmp/oct-sK56wM.o
 ccache x86_64-w64-mingw32-g++ -I\mingw64\include\octave-7.0.0\octave\.. -I\mingw64\include\octave-7.0.0\octave -I\mingw64\include   -fopenmp -g -O2  -o test/mex/bug_54096.mex  C:/msys64/tmp/oct-sK56wM.o  -L./libinterp/.lib -L./liboctave/.lib -shared -L\mingw64\lib\octave\7.0.0 -L\mingw64\lib -shared  -L\mingw64\lib\octave\7.0.0 -L\mingw64\lib -shared -L/mingw64/lib/octave/7.0.0 -loctinterp -loctave

Only difference is that I changed some \ to /.

Is the translation to backslashes something we are doing actively in our code?
While backslash (\) is the “native” file separator on Windows, forward slash (/) seems to work in most (or all?) cases as a file separator, too. The MSYS2 environment (or some programs like the gcc linker) seems to require forward slashes in some cases.

Edit: I forgot to add that the makeinfo command failed without quotes around the path to the source. The following change helped:

diff -r 3f61913fdee4 doc/interpreter/mk-doc-cache.pl
--- a/doc/interpreter/mk-doc-cache.pl	Wed May 26 13:45:14 2021 -0400
+++ b/doc/interpreter/mk-doc-cache.pl	Sun May 30 12:16:20 2021 +0200
@@ -99,7 +99,7 @@
 {
   my $texi_path = shift;
 
-  my $makeinfo_command = "makeinfo --no-headers --no-warn --force --no-validate --fill-column=1024 $texi_path";
+  my $makeinfo_command = "makeinfo --no-headers --no-warn --force --no-validate --fill-column=1024 '$texi_path'";
   my $info_text = `$makeinfo_command`;
 
   die "Unable to start makeinfo command '$makeinfo_command'"

I did all these tests with hg id 3f61913fdee4.

Edit 2: The CLI (including readline) seems to work when started from the cmd shell after setting some environment variables:

set PATH=C:\msys64\mingw64\bin;C:\msys64\usr\bin;%PATH%
set MSYSTEM=MINGW64
set TERM=cygwin
set GNUTERM=wxt
set GS=gs.exe
set PERL5SHELL=bash -l -c
octave-cli

Edit 3: The GUI also works (in the CMD shell) if I symlink the executable octave-gui.exe to the bin directory (in the MSYS2 shell):

make install
ln -sf /mingw64/libexec/octave/7.0.0/exec/x86_64-w64-mingw32/octave-gui.exe /mingw64/bin/octave-gui.exe

I’m currently trying to translate this to a GitHub action:
Editing octave/make.yaml at mmuetzel-windows-ci · mmuetzel/octave (github.com)

I needed to make some changes to the repository to get that started. I’ll write a post about that later.

Edit 4: I added instructions on how to build Octave natively on Windows to the Wiki here:
Building on Microsoft Windows - Octave
That could make it much more convenient to test changes that target the Windows platform because it will allow making incremental builds (I hope so at least).

1 Like

The git that is installed on the Windows Github runners is configured to translate LF line endings to CRLF. That causes some scripts to fail that only work with LF line endings.
See also this report against the checkout action:
Windows - Line endings & conversion · Issue #135 · actions/checkout (github.com)
IIUC, they write that the translation of line endings is something that most users would like to have. (I wonder in which situations that could ever be useful and not a hindrance.)
Anyway, their solution is to add a .gitattributes file with the following content if the line endings should be treated as-is on checking out from and checking in to the repository:

* -text

Would it be ok to add that file to the Mercurial repository?
Adding that file shouldn’t make any difference on any platform other than Windows. But it would help when checking out the sources with git on Windows.

Would it be ok to check in the change to doc/interpreter/mk-doc-cache.pl in the comment before?

At least okay with me :+1:

Adding single quotes does not look harmful on the first sight, but I am no native Perl speaker :thinking: My 2 pence is, just push the change, and if anyone complains it can be reverted anytime. It is the development branch after all :innocent:

I pushed a change adding the CI-tests on Windows on GitHub-hosted runners here:
octave: 504fcc051d51 (gnu.org)

Will do.

Edit: Pushed here: octave: c6f9ff84dc84

It looks like that change was only needed when running Octave from the MSYS2 shell. But that doesn’t work for different reasons anyway. So, we can probably just leave that as it is.

@mmuetzel some update here if you continue using the “fresh brewed” Octave builds.

I switched from storing the builds using the Octave hg-id to use the “buildnumber” of the “octave”-builder, e.g. “112” in https://www.octave.space/data/stable/112/.

I had some trouble getting the really unique “buildid”. If anybody knows how to get it, please point me to that information. Switching to that is not that big deal. Here is how I determine the ID now from the properties:

https://github.com/gnu-octave/octave-buildbot/blob/3cb862c46723d942b9f68eaf24826207af404a20/master/defaults/master.cfg#L190-L196

@mmuetzel in your YAML file

please replace OCTAVE_HG_ID with OCTAVE_BUILD_ID and it should work again.

@siko1056: Thanks for the information.
I was going to write that the native builds are probably better suited as a CI for the Octave repository.
If you are interested in having the “freshly brewed” Octave tested with a CI rule, you are welcome to take that file as a base. It would probably best fit in to the repository that holds the buildbot configuration.
I’ll probably keep that branch for a while in my fork (but probably not indefinitely).

Never mind. The issue with my Buildbots and potentially duplicated files existed independently of your intended use :slightly_smiling_face:

I saved your efforts in the repository Idea for GitHub Actions CI of the generated builds · Issue #10 · gnu-octave/octave-buildbot · GitHub If you no longer follow that approach, don’t burden your fork with that file :innocent:

In our “main” repository on GitHub, the 32bit Windows runner seems to hang always at or around these lines during configure:

checking whether LSAME is called correctly from Fortran... yes
checking whether ISAMAX is called correctly from Fortran... yes
checking whether SDOT is called correctly from Fortran... yes
Error: The operation was canceled.

I didn’t see this hang before and it “just works” with the identical fork here: mmuetzel/octave
I wonder what could cause this.

Edit: I removed using ccache for Fortran on Windows here: https://hg.savannah.gnu.org/hgweb/octave/rev/24effbddcbe8
Let’s see if this will make any difference.

Edit 2: De-activating ccache for Fortran doesn’t seem to make a difference.
I pushed another change that updates the MSYS2 environment at the beginning of the workflow on Windows runners: octave: be335be5c0bc (gnu.org)
Let’s see if this’ll make a difference.

Edit 3: That also didn’t help. I’m running out of ideas how to resolve this.
To somewhat mitigate the impact, I pushed a change here that reduces the timeout of the configure step from 6 hours to 30 minutes: octave: c3bab252f071 (gnu.org)
Does anyone have ideas why compiling Fortran code seems to block the runner indefinitely intermittently?

Edit 4: The issue transformed from being sporadic to being reproducible about each time the action is running. Maybe more and more runners are updated to problematic packages?

1 Like

The GitHub runner that executes the test suite with @siko1056’s nightly builds are failing since yesterday (e.g. here).
Last line in the log before Octave apparently crashes:

  geometry\delaunay.m ............................................
Error: Process completed with exit code 127.

The runner is downloading the build from the MXE Octave default branch. Maybe we should extend the action to also test the builds from the release branch…

Has something significant changed?

This delaunay test dump lots of things like this:

  geometry/delaunay.m ............................................QH6019 qhull input error: can not scale last coordinate.  Input is cocircular
   or cospherical.   Use option 'Qz' to add a point at infinity.

While executing:  | qhull d Qt Qbb Qc
Options selected for Qhull 2015.2 2016/01/18:
  run-id 257155600  delaunay  Qtriangulate  Qbbound-last  Qcoplanar-keep
  _pre-merge  _zero-centrum  Qinterior-keep  Pgood
QH6019 qhull input error: can not scale last coordinate.  Input is cocircular
   or cospherical.   Use option 'Qz' to add a point at infinity.

While executing:  | qhull d Qt Qbb Qc
Options selected for Qhull 2015.2 2016/01/18:
  run-id 257155600  delaunay  Qtriangulate  Qbbound-last  Qcoplanar-keep
  _pre-merge  _zero-centrum  Qinterior-keep  Pgood
 pass   15/15  

But also in a previous successful run https://github.com/mmuetzel/octave-buildbot/runs/2767090614?check_suite_focus=true.

Could it be that a filter reacts to this “error” key word and stops the job? :thinking:

The failing runs might coincide with the update of gcc to 10.3.0: https://hg.octave.org/mxe-octave/rev/0c4e2d53981c
Shortly after that, I pushed a merge at Mon, 07 Jun 2021 20:49:26. IIRC, I pushed that at the same time as the changeset that updated gcc.
I don’t recall seeing this crash when I built with gcc 10.3.0 three days ago. But if I run test delaunay now with that build, Octave crashes.
gdb backtrace:

gdb: unknown target exception 0xc0000028 at 0x7ff9fd9f2346

Thread 18 received signal ?, Unknown signal.
[Switching to Thread 10748.0x294c]
0x00007ff9fd9f2346 in ntdll!RtlRaiseStatus ()
   from C:\WINDOWS\SYSTEM32\ntdll.dll
(gdb) bt
#0  0x00007ff9fd9f2346 in ntdll!RtlRaiseStatus ()
   from C:\WINDOWS\SYSTEM32\ntdll.dll
#1  0x00007ff9fd920bb3 in ntdll!RtlUnwindEx ()
   from C:\WINDOWS\SYSTEM32\ntdll.dll
#2  0x00007ff9fbaf2eed in msvcrt!_setjmpex ()
   from C:\WINDOWS\System32\msvcrt.dll
#3  0x000000006dbced48 in qh_errexit ()
   from D:\SVN\Octave\test\octave-2021-06-07-18-41-w64 gcc\octave-2021-06-07-18-41-w64\mingw64\bin\libqhull_r.dll
#4  0x000000006db90864 in qh_scalelast ()
   from D:\SVN\Octave\test\octave-2021-06-07-18-41-w64 gcc\octave-2021-06-07-18-41-w64\mingw64\bin\libqhull_r.dll
#5  0x000000006db9d348 in qh_initbuild ()
   from D:\SVN\Octave\test\octave-2021-06-07-18-41-w64 gcc\octave-2021-06-07-18-41-w64\mingw64\bin\libqhull_r.dll
#6  0x000000006dbb12a5 in qh_qhull ()
   from D:\SVN\Octave\test\octave-2021-06-07-18-41-w64 gcc\octave-2021-06-07-18-41-w64\mingw64\bin\libqhull_r.dll
#7  0x000000006dbce193 in qh_new_qhull ()
   from D:\SVN\Octave\test\octave-2021-06-07-18-41-w64 gcc\octave-2021-06-07-18-41-w64\mingw64\bin\libqhull_r.dll
#8  0x00000000619c1cbb in __delaunayn__!_Z14F__delaunayn__RK17octave_value_listi ()
   from D:\SVN\Octave\test\octave-2021-06-07-18-41-w64 gcc\octave-2021-06-07-18--Type <RET> for more, q to quit, c to continue without paging--c
-41-w64\mingw64\lib\octave\7.0.0\oct\x86_64-w64-mingw32\__delaunayn__.oct
#9  0x000000006f6c3f5f in liboctinterp-8!_ZN14octave_builtin7executeERN6octave14tree_evaluatorEiRK17octave_value_list () from D:\SVN\Octave\test\octave-2021-06-07-18-41-w64 gcc\octave-2021-06-07-18-41-w64\mingw64\bin\liboctinterp-8.dll
#10 0x000000006f700f0e in liboctinterp-8!_ZN15octave_function4callERN6octave14tree_evaluatorEiRK17octave_value_list () from D:\SVN\Octave\test\octave-2021-06-07-18-41-w64 gcc\octave-2021-06-07-18-41-w64\mingw64\bin\liboctinterp-8.dll
#11 0x000000006f7f1905 in liboctinterp-8!_ZN6octave14tree_evaluator15remove_autoloadERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES8_ () from D:\SVN\Octave\test\octave-2021-06-07-18-41-w64 gcc\octave-2021-06-07-18-41-w64\mingw64\bin\liboctinterp-8.dll
#12 0x000000006fdfb63c in liboctinterp-8!_ZN6octave21text_element_fontsize6acceptERNS_14text_processorE () from D:\SVN\Octave\test\octave-2021-06-07-18-41-w64 gcc\octave-2021-06-07-18-41-w64\mingw64\bin\liboctinterp-8.dll
#13 0x000000006f7c520e in liboctinterp-8!_ZN6octave8profiler14enter_functionERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE () from D:\SVN\Octave\test\octave-2021-06-07-18-41-w64 gcc\octave-2021-06-07-18-41-w64\mingw64\bin\liboctinterp-8.dll
#14 0x000000006f7e5a5c in liboctinterp-8!_ZN6octave14tree_evaluator15visit_statementERNS_14tree_statementE () from D:\SVN\Octave\test\octave-2021-06-07-18-41-w64 gcc\octave-2021-06-07-18-41-w64\mingw64\bin\liboctinterp-8.dll
#15 0x000000006f7d338c in liboctinterp-8!_ZN6octave14tree_evaluator20visit_statement_listERNS_19tree_statement_listE () from D:\SVN\Octave\test\octave-2021-06-07-18-41-w64 gcc\octave-2021-06-07-18-41-w64\mingw64\bin\liboctinterp-8.dll
#16 0x000000006f7de38f in liboctinterp-8!_ZN6octave14tree_evaluator23visit_try_catch_commandERNS_22tree_try_catch_commandE () from D:\SVN\Octave\test\octave-2021-06-07-18-41-w64 gcc\octave-2021-06-07-18-41-w64\mingw64\bin\liboctinterp-8.dll
#17 0x000000006f7e599c in liboctinterp-8!_ZN6octave14tree_evaluator15visit_statementERNS_14tree_statementE () from D:\SVN\Octave\test\octave-2021-06-07-18-41-w64 gcc\octave-2021-06-07-18-41-w64\mingw64\bin\liboctinterp-8.dll
#18 0x000000006f7d338c in liboctinterp-8!_ZN6octave14tree_evaluator20visit_statement_listERNS_19tree_statement_listE () from D:\SVN\Octave\test\octave-2021-06-07-18-41-w64 gcc\octave-2021-06-07-18-41-w64\mingw64\bin\liboctinterp-8.dll
#19 0x000000006f7e599c in liboctinterp-8!_ZN6octave14tree_evaluator15visit_statementERNS_14tree_statementE () from D:\SVN\Octave\test\octave-2021-06-07-18-41-w64 gcc\octave-2021-06-07-18-41-w64\mingw64\bin\liboctinterp-8.dll
#20 0x000000006f7d338c in liboctinterp-8!_ZN6octave14tree_evaluator20visit_statement_listERNS_19tree_statement_listE () from D:\SVN\Octave\test\octave-2021-06-07-18-41-w64 gcc\octave-2021-06-07-18-41-w64\mingw64\bin\liboctinterp-8.dll
#21 0x000000006f7dcd36 in liboctinterp-8!_ZN6octave14tree_evaluator21execute_user_functionER20octave_user_functioniRK17octave_value_list () from D:\SVN\Octave\test\octave-2021-06-07-18-41-w64 gcc\octave-2021-06-07-18-41-w64\mingw64\bin\liboctinterp-8.dll
#22 0x000000006f75ef6c in liboctinterp-8!_Z9FisargoutRN6octave11interpreterERK17octave_value_listi () from D:\SVN\Octave\test\octave-2021-06-07-18-41-w64 gcc\octave-2021-06-07-18-41-w64\mingw64\bin\liboctinterp-8.dll
#23 0x000000006f7f1905 in liboctinterp-8!_ZN6octave14tree_evaluator15remove_autoloadERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES8_ () from D:\SVN\Octave\test\octave-2021-06-07-18-41-w64 gcc\octave-2021-06-07-18-41-w64\mingw64\bin\liboctinterp-8.dll
#24 0x000000006fdfb63c in liboctinterp-8!_ZN6octave21text_element_fontsize6acceptERNS_14text_processorE () from D:\SVN\Octave\test\octave-2021-06-07-18-41-w64 gcc\octave-2021-06-07-18-41-w64\mingw64\bin\liboctinterp-8.dll
#25 0x000000006f7c520e in liboctinterp-8!_ZN6octave8profiler14enter_functionERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE () from D:\SVN\Octave\test\octave-2021-06-07-18-41-w64 gcc\octave-2021-06-07-18-41-w64\mingw64\bin\liboctinterp-8.dll
#26 0x000000006f7e5a5c in liboctinterp-8!_ZN6octave14tree_evaluator15visit_statementERNS_14tree_statementE () from D:\SVN\Octave\test\octave-2021-06-07-18-41-w64 gcc\octave-2021-06-07-18-41-w64\mingw64\bin\liboctinterp-8.dll
#27 0x000000006f7d338c in liboctinterp-8!_ZN6octave14tree_evaluator20visit_statement_listERNS_19tree_statement_listE () from D:\SVN\Octave\test\octave-2021-06-07-18-41-w64 gcc\octave-2021-06-07-18-41-w64\mingw64\bin\liboctinterp-8.dll
#28 0x000000006f7e599c in liboctinterp-8!_ZN6octave14tree_evaluator15visit_statementERNS_14tree_statementE () from D:\SVN\Octave\test\octave-2021-06-07-18-41-w64 gcc\octave-2021-06-07-18-41-w64\mingw64\bin\liboctinterp-8.dll
#29 0x000000006f7d338c in liboctinterp-8!_ZN6octave14tree_evaluator20visit_statement_listERNS_19tree_statement_listE () from D:\SVN\Octave\test\octave-2021-06-07-18-41-w64 gcc\octave-2021-06-07-18-41-w64\mingw64\bin\liboctinterp-8.dll
#30 0x000000006f7dcd36 in liboctinterp-8!_ZN6octave14tree_evaluator21execute_user_functionER20octave_user_functioniRK17octave_value_list () from D:\SVN\Octave\test\octave-2021-06-07-18-41-w64 gcc\octave-2021-06-07-18-41-w64\mingw64\bin\liboctinterp-8.dll
#31 0x000000006f75ef6c in liboctinterp-8!_Z9FisargoutRN6octave11interpreterERK17octave_value_listi () from D:\SVN\Octave\test\octave-2021-06-07-18-41-w64 gcc\octave-2021-06-07-18-41-w64\mingw64\bin\liboctinterp-8.dll
#32 0x000000006f7f1905 in liboctinterp-8!_ZN6octave14tree_evaluator15remove_autoloadERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES8_ () from D:\SVN\Octave\test\octave-2021-06-07-18-41-w64 gcc\octave-2021-06-07-18-41-w64\mingw64\bin\liboctinterp-8.dll
#33 0x000000006fdfb63c in liboctinterp-8!_ZN6octave21text_element_fontsize6acceptERNS_14text_processorE () from D:\SVN\Octave\test\octave-2021-06-07-18-41-w64 gcc\octave-2021-06-07-18-41-w64\mingw64\bin\liboctinterp-8.dll
#34 0x000000006f7dd7d4 in liboctinterp-8!_ZN6octave14tree_evaluator23convert_to_const_vectorEPNS_18tree_argument_listE () from D:\SVN\Octave\test\octave-2021-06-07-18-41-w64 gcc\octave-2021-06-07-18-41-w64\mingw64\bin\liboctinterp-8.dll
#35 0x000000006f7f1a51 in liboctinterp-8!_ZN6octave14tree_evaluator15remove_autoloadERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES8_ () from D:\SVN\Octave\test\octave-2021-06-07-18-41-w64 gcc\octave-2021-06-07-18-41-w64\mingw64\bin\liboctinterp-8.dll
#36 0x000000006fdfb63c in liboctinterp-8!_ZN6octave21text_element_fontsize6acceptERNS_14text_processorE () from D:\SVN\Octave\test\octave-2021-06-07-18-41-w64 gcc\octave-2021-06-07-18-41-w64\mingw64\bin\liboctinterp-8.dll
#37 0x000000006f7dd7d4 in liboctinterp-8!_ZN6octave14tree_evaluator23convert_to_const_vectorEPNS_18tree_argument_listE () from D:\SVN\Octave\test\octave-2021-06-07-18-41-w64 gcc\octave-2021-06-07-18-41-w64\mingw64\bin\liboctinterp-8.dll
#38 0x000000006f7f1a51 in liboctinterp-8!_ZN6octave14tree_evaluator15remove_autoloadERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES8_ () from D:\SVN\Octave\test\octave-2021-06-07-18-41-w64 gcc\octave-2021-06-07-18-41-w64\mingw64\bin\liboctinterp-8.dll
#39 0x000000006fdfb63c in liboctinterp-8!_ZN6octave21text_element_fontsize6acceptERNS_14text_processorE () from D:\SVN\Octave\test\octave-2021-06-07-18-41-w64 gcc\octave-2021-06-07-18-41-w64\mingw64\bin\liboctinterp-8.dll
#40 0x000000006f7dd7d4 in liboctinterp-8!_ZN6octave14tree_evaluator23convert_to_const_vectorEPNS_18tree_argument_listE () from D:\SVN\Octave\test\octave-2021-06-07-18-41-w64 gcc\octave-2021-06-07-18-41-w64\mingw64\bin\liboctinterp-8.dll
#41 0x000000006f7f1a51 in liboctinterp-8!_ZN6octave14tree_evaluator15remove_autoloadERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES8_ () from D:\SVN\Octave\test\octave-2021-06-07-18-41-w64 gcc\octave-2021-06-07-18-41-w64\mingw64\bin\liboctinterp-8.dll
#42 0x000000006fdfb63c in liboctinterp-8!_ZN6octave21text_element_fontsize6acceptERNS_14text_processorE () from D:\SVN\Octave\test\octave-2021-06-07-18-41-w64 gcc\octave-2021-06-07-18-41-w64\mingw64\bin\liboctinterp-8.dll
#43 0x000000006f7e5a5c in liboctinterp-8!_ZN6octave14tree_evaluator15visit_statementERNS_14tree_statementE () from D:\SVN\Octave\test\octave-2021-06-07-18-41-w64 gcc\octave-2021-06-07-18-41-w64\mingw64\bin\liboctinterp-8.dll
#44 0x000000006f7d338c in liboctinterp-8!_ZN6octave14tree_evaluator20visit_statement_listERNS_19tree_statement_listE () from D:\SVN\Octave\test\octave-2021-06-07-18-41-w64 gcc\octave-2021-06-07-18-41-w64\mingw64\bin\liboctinterp-8.dll
#45 0x000000006f7dcd36 in liboctinterp-8!_ZN6octave14tree_evaluator21execute_user_functionER20octave_user_functioniRK17octave_value_list () from D:\SVN\Octave\test\octave-2021-06-07-18-41-w64 gcc\octave-2021-06-07-18-41-w64\mingw64\bin\liboctinterp-8.dll
#46 0x000000006f75ef6c in liboctinterp-8!_Z9FisargoutRN6octave11interpreterERK17octave_value_listi () from D:\SVN\Octave\test\octave-2021-06-07-18-41-w64 gcc\octave-2021-06-07-18-41-w64\mingw64\bin\liboctinterp-8.dll
#47 0x000000006f7f1905 in liboctinterp-8!_ZN6octave14tree_evaluator15remove_autoloadERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES8_ () from D:\SVN\Octave\test\octave-2021-06-07-18-41-w64 gcc\octave-2021-06-07-18-41-w64\mingw64\bin\liboctinterp-8.dll
#48 0x000000006f7df8ff in liboctinterp-8!_ZN6octave14tree_evaluator11eval_stringERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbRii () from D:\SVN\Octave\test\octave-2021-06-07-18-41-w64 gcc\octave-2021-06-07-18-41-w64\mingw64\bin\liboctinterp-8.dll
#49 0x000000006f7dfcd0 in liboctinterp-8!_ZN6octave14tree_evaluator4evalERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEi () from D:\SVN\Octave\test\octave-2021-06-07-18-41-w64 gcc\octave-2021-06-07-18-41-w64\mingw64\bin\liboctinterp-8.dll
#50 0x000000006fac18f5 in liboctinterp-8!_ZN6octave11interpreter4evalERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEi () from D:\SVN\Octave\test\octave-2021-06-07-18-41-w64 gcc\octave-2021-06-07-18-41-w64\mingw64\bin\liboctinterp-8.dll
#51 0x000000006f7ad741 in liboctinterp-8!_Z5FevalRN6octave11interpreterERK17octave_value_listi () from D:\SVN\Octave\test\octave-2021-06-07-18-41-w64 gcc\octave-2021-06-07-18-41-w64\mingw64\bin\liboctinterp-8.dll
#52 0x000000006f6c4279 in liboctinterp-8!_ZN14octave_builtin7executeERN6octave14tree_evaluatorEiRK17octave_value_list () from D:\SVN\Octave\test\octave-2021-06-07-18-41-w64 gcc\octave-2021-06-07-18-41-w64\mingw64\bin\liboctinterp-8.dll
#53 0x000000006f700f0e in liboctinterp-8!_ZN15octave_function4callERN6octave14tree_evaluatorEiRK17octave_value_list () from D:\SVN\Octave\test\octave-2021-06-07-18-41-w64 gcc\octave-2021-06-07-18-41-w64\mingw64\bin\liboctinterp-8.dll
#54 0x000000006f7f1905 in liboctinterp-8!_ZN6octave14tree_evaluator15remove_autoloadERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES8_ () from D:\SVN\Octave\test\octave-2021-06-07-18-41-w64 gcc\octave-2021-06-07-18-41-w64\mingw64\bin\liboctinterp-8.dll
#55 0x000000006fdfb63c in liboctinterp-8!_ZN6octave21text_element_fontsize6acceptERNS_14text_processorE () from D:\SVN\Octave\test\octave-2021-06-07-18-41-w64 gcc\octave-2021-06-07-18-41-w64\mingw64\bin\liboctinterp-8.dll
#56 0x000000006f7e5a5c in liboctinterp-8!_ZN6octave14tree_evaluator15visit_statementERNS_14tree_statementE () from D:\SVN\Octave\test\octave-2021-06-07-18-41-w64 gcc\octave-2021-06-07-18-41-w64\mingw64\bin\liboctinterp-8.dll
#57 0x000000006f7d338c in liboctinterp-8!_ZN6octave14tree_evaluator20visit_statement_listERNS_19tree_statement_listE () from D:\SVN\Octave\test\octave-2021-06-07-18-41-w64 gcc\octave-2021-06-07-18-41-w64\mingw64\bin\liboctinterp-8.dll
#58 0x000000006f7de38f in liboctinterp-8!_ZN6octave14tree_evaluator23visit_try_catch_commandERNS_22tree_try_catch_commandE () from D:\SVN\Octave\test\octave-2021-06-07-18-41-w64 gcc\octave-2021-06-07-18-41-w64\mingw64\bin\liboctinterp-8.dll
#59 0x000000006f7e599c in liboctinterp-8!_ZN6octave14tree_evaluator15visit_statementERNS_14tree_statementE () from D:\SVN\Octave\test\octave-2021-06-07-18-41-w64 gcc\octave-2021-06-07-18-41-w64\mingw64\bin\liboctinterp-8.dll
#60 0x000000006f7d338c in liboctinterp-8!_ZN6octave14tree_evaluator20visit_statement_listERNS_19tree_statement_listE () from D:\SVN\Octave\test\octave-2021-06-07-18-41-w64 gcc\octave-2021-06-07-18-41-w64\mingw64\bin\liboctinterp-8.dll
#61 0x000000006f7e599c in liboctinterp-8!_ZN6octave14tree_evaluator15visit_statementERNS_14tree_statementE () from D:\SVN\Octave\test\octave-2021-06-07-18-41-w64 gcc\octave-2021-06-07-18-41-w64\mingw64\bin\liboctinterp-8.dll
#62 0x000000006f7d338c in liboctinterp-8!_ZN6octave14tree_evaluator20visit_statement_listERNS_19tree_statement_listE () from D:\SVN\Octave\test\octave-2021-06-07-18-41-w64 gcc\octave-2021-06-07-18-41-w64\mingw64\bin\liboctinterp-8.dll
#63 0x000000006f7def1b in liboctinterp-8!_ZN6octave14tree_evaluator28visit_unwind_protect_commandERNS_27tree_unwind_protect_commandE () from D:\SVN\Octave\test\octave-2021-06-07-18-41-w64 gcc\octave-2021-06-07-18-41-w64\mingw64\bin\liboctinterp-8.dll
#64 0x000000006f7e599c in liboctinterp-8!_ZN6octave14tree_evaluator15visit_statementERNS_14tree_statementE () from D:\SVN\Octave\test\octave-2021-06-07-18-41-w64 gcc\octave-2021-06-07-18-41-w64\mingw64\bin\liboctinterp-8.dll
#65 0x000000006f7d338c in liboctinterp-8!_ZN6octave14tree_evaluator20visit_statement_listERNS_19tree_statement_listE () from D:\SVN\Octave\test\octave-2021-06-07-18-41-w64 gcc\octave-2021-06-07-18-41-w64\mingw64\bin\liboctinterp-8.dll
#66 0x000000006fdee3fc in liboctinterp-8!_ZN6octave11text_parser5parseERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERK12caseless_str () from D:\SVN\Octave\test\octave-2021-06-07-18-41-w64 gcc\octave-2021-06-07-18-41-w64\mingw64\bin\liboctinterp-8.dll
#67 0x000000006f7e4622 in liboctinterp-8!_ZN6octave14tree_evaluator24visit_simple_for_commandERNS_23tree_simple_for_commandE () from D:\SVN\Octave\test\octave-2021-06-07-18-41-w64 gcc\octave-2021-06-07-18-41-w64\mingw64\bin\liboctinterp-8.dll
#68 0x000000006f7e599c in liboctinterp-8!_ZN6octave14tree_evaluator15visit_statementERNS_14tree_statementE () from D:\SVN\Octave\test\octave-2021-06-07-18-41-w64 gcc\octave-2021-06-07-18-41-w64\mingw64\bin\liboctinterp-8.dll
#69 0x000000006f7d338c in liboctinterp-8!_ZN6octave14tree_evaluator20visit_statement_listERNS_19tree_statement_listE () from D:\SVN\Octave\test\octave-2021-06-07-18-41-w64 gcc\octave-2021-06-07-18-41-w64\mingw64\bin\liboctinterp-8.dll
#70 0x000000006f7dcd36 in liboctinterp-8!_ZN6octave14tree_evaluator21execute_user_functionER20octave_user_functioniRK17octave_value_list () from D:\SVN\Octave\test\octave-2021-06-07-18-41-w64 gcc\octave-2021-06-07-18-41-w64\mingw64\bin\liboctinterp-8.dll
#71 0x000000006f75ef6c in liboctinterp-8!_Z9FisargoutRN6octave11interpreterERK17octave_value_listi () from D:\SVN\Octave\test\octave-2021-06-07-18-41-w64 gcc\octave-2021-06-07-18-41-w64\mingw64\bin\liboctinterp-8.dll
#72 0x000000006f7f1905 in liboctinterp-8!_ZN6octave14tree_evaluator15remove_autoloadERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES8_ () from D:\SVN\Octave\test\octave-2021-06-07-18-41-w64 gcc\octave-2021-06-07-18-41-w64\mingw64\bin\liboctinterp-8.dll
#73 0x000000006fdfb63c in liboctinterp-8!_ZN6octave21text_element_fontsize6acceptERNS_14text_processorE () from D:\SVN\Octave\test\octave-2021-06-07-18-41-w64 gcc\octave-2021-06-07-18-41-w64\mingw64\bin\liboctinterp-8.dll
#74 0x000000006f7e5a5c in liboctinterp-8!_ZN6octave14tree_evaluator15visit_statementERNS_14tree_statementE () from D:\SVN\Octave\test\octave-2021-06-07-18-41-w64 gcc\octave-2021-06-07-18-41-w64\mingw64\bin\liboctinterp-8.dll
#75 0x000000006f7d338c in liboctinterp-8!_ZN6octave14tree_evaluator20visit_statement_listERNS_19tree_statement_listE () from D:\SVN\Octave\test\octave-2021-06-07-18-41-w64 gcc\octave-2021-06-07-18-41-w64\mingw64\bin\liboctinterp-8.dll
#76 0x000000006f7d54ea in liboctinterp-8!_ZN6octave14tree_evaluator4evalERSt10shared_ptrINS_19tree_statement_listEEb () from D:\SVN\Octave\test\octave-2021-06-07-18-41-w64 gcc\octave-2021-06-07-18-41-w64\mingw64\bin\liboctinterp-8.dll
#77 0x000000006f7e61eb in liboctinterp-8!_ZN6octave14tree_evaluator4replEv () from D:\SVN\Octave\test\octave-2021-06-07-18-41-w64 gcc\octave-2021-06-07-18-41-w64\mingw64\bin\liboctinterp-8.dll
#78 0x000000006facbbec in liboctinterp-8!_ZN6octave11interpreter7executeEv () from D:\SVN\Octave\test\octave-2021-06-07-18-41-w64 gcc\octave-2021-06-07-18-41-w64\mingw64\bin\liboctinterp-8.dll
#79 0x000000006c114f39 in liboctgui-6!_Z15liboctgui_hg_idB5cxx11v () from D:\SVN\Octave\test\octave-2021-06-07-18-41-w64 gcc\octave-2021-06-07-18-41-w64\mingw64\bin\liboctgui-6.dll
#80 0x000000006695185e in QObject::event(QEvent*) () from D:\SVN\Octave\test\octave-2021-06-07-18-41-w64 gcc\octave-2021-06-07-18-41-w64\mingw64\bin\Qt5Core.dll
#81 0x0000000005987f43 in QApplicationPrivate::notify_helper(QObject*, QEvent*) () from D:\SVN\Octave\test\octave-2021-06-07-18-41-w64 gcc\octave-2021-06-07-18-41-w64\mingw64\bin\Qt5Widgets.dll
#82 0x000000006c16f576 in liboctgui-6!_Z15liboctgui_hg_idB5cxx11v () from D:\SVN\Octave\test\octave-2021-06-07-18-41-w64 gcc\octave-2021-06-07-18-41-w64\mingw64\bin\liboctgui-6.dll
#83 0x0000000066923c4a in QCoreApplication::notifyInternal2(QObject*, QEvent*) () from D:\SVN\Octave\test\octave-2021-06-07-18-41-w64 gcc\octave-2021-06-07-18-41-w64\mingw64\bin\Qt5Core.dll
#84 0x00000000669292d9 in QCoreApplicationPrivate::sendPostedEvents(QObject*, int, QThreadData*) () from D:\SVN\Octave\test\octave-2021-06-07-18-41-w64 gcc\octave-2021-06-07-18-41-w64\mingw64\bin\Qt5Core.dll
#85 0x000000006697f9c9 in QEventDispatcherWin32::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from D:\SVN\Octave\test\octave-2021-06-07-18-41-w64 gcc\octave-2021-06-07-18-41-w64\mingw64\bin\Qt5Core.dll
#86 0x00000000669228c3 in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () from D:\SVN\Octave\test\octave-2021-06-07-18-41-w64 gcc\octave-2021-06-07-18-41-w64\mingw64\bin\Qt5Core.dll
#87 0x0000000066759040 in QThread::run() () from D:\SVN\Octave\test\octave-2021-06-07-18-41-w64 gcc\octave-2021-06-07-18-41-w64\mingw64\bin\Qt5Core.dll
#88 0x0000000066759c63 in QThread::setTerminationEnabled(bool) () from D:\SVN\Octave\test\octave-2021-06-07-18-41-w64 gcc\octave-2021-06-07-18-41-w64\mingw64\bin\Qt5Core.dll
#89 0x00007ff9fd3a7034 in KERNEL32!BaseThreadInitThunk () from C:\WINDOWS\System32\kernel32.dll
#90 0x00007ff9fd942651 in ntdll!RtlUserThreadStart () from C:\WINDOWS\SYSTEM32\ntdll.dll
#91 0x0000000000000000 in ?? ()
Backtrace stopped: previous frame inner to this frame (corrupt stack?)
(gdb)

This is with the default Octave branch. IIRC, we are still using the non-reentrant version of QHull on the stable branch. So the backtrace would probably look differently for the build that the GitHub runner is using.