Skip to content

cgen: fix fn call with mut reference args (fix #21265) (#21719) #5543

cgen: fix fn call with mut reference args (fix #21265) (#21719)

cgen: fix fn call with mut reference args (fix #21265) (#21719) #5543

Workflow file for this run

name: CI Linux
on:
workflow_dispatch:
push:
paths-ignore:
- '**.md'
- '**.yml'
- '!**/linux_ci.yml'
- 'cmd/tools/**'
- '!cmd/tools/builders/**.v'
pull_request:
paths-ignore:
- '**.md'
- '**.yml'
- '!**/linux_ci.yml'
- 'cmd/tools/**'
- '!cmd/tools/builders/**.v'
concurrency:
group: ${{ github.workflow }}-${{ github.ref == 'refs/heads/master' && github.sha || github.ref }}
cancel-in-progress: true
jobs:
tcc:
runs-on: ubuntu-20.04
timeout-minutes: 121
env:
VFLAGS: -cc tcc -no-retry-compilation
steps:
- uses: actions/checkout@v4
- name: Build v
run: make -j4 && ./v symlink
- name: Build v with -prealloc
run: |
v -d debug_malloc -d debug_realloc -o v cmd/v
v -cg -cstrict -o v cmd/v
# Test v -realloc arena allocation
v -o vrealloc -prealloc cmd/v && ./vrealloc -o v3 cmd/v && ./v3 -o v4 cmd/v
- name: All code is formatted
run: v test-cleancode
- name: Install dependencies for examples and tools
run: |
v retry -- sudo apt update
v retry -- sudo apt install --quiet -y libssl-dev sqlite3 libsqlite3-dev valgrind
v retry -- sudo apt install --quiet -y libfreetype6-dev libxi-dev libxcursor-dev libgl-dev libasound2-dev
# The following is needed for examples/wkhtmltopdf.v
v retry -- wget https://github.com/wkhtmltopdf/packaging/releases/download/0.12.6-1/wkhtmltox_0.12.6-1.focal_amd64.deb
v retry -- sudo apt install --quiet -y xfonts-75dpi xfonts-base
v retry -- sudo apt install --quiet -y expect
v retry -- sudo dpkg -i wkhtmltox_0.12.6-1.focal_amd64.deb
- name: Test v->c
run: |
thirdparty/tcc/tcc.exe -version
v -cg -o v cmd/v # Make sure vtcc can build itself twice
# v test-all
- name: v self compilation
run: v -o v2 cmd/v && ./v2 -o v3 cmd/v && ./v3 -o v4 cmd/v
- name: v self compilation with -skip-unused
run: v -skip-unused -o v2 cmd/v && ./v2 -skip-unused -o v3 cmd/v && ./v3 -skip-unused -o v4 cmd/v
- name: v doctor
run: v doctor
- name: Verify `v test` works
run: |
echo $VFLAGS
v cmd/tools/test_if_v_test_system_works.v
./cmd/tools/test_if_v_test_system_works
- name: Test pure V math module
run: v -exclude @vlib/math/*.c.v test vlib/math/
- name: Self tests
run: v test-self vlib
# - name: Self tests (-cstrict)
# run: V_CI_CSTRICT=1 v -cstrict test-self vlib
- name: Build examples
run: v -N -W build-examples
- name: Run the submodule example, using a relative path
run: v -W run examples/submodule
- name: Build v tools
run: v -N -W build-tools
- name: Build v binaries
run: v -N -W build-vbinaries
- name: Build benches
run: v should-compile-all vlib/v/tests/bench/
- name: Run a VSH script
run: v run examples/v_script.vsh
- name: Test v tutorials
run: v tutorials/building_a_simple_web_blog_with_vweb/code/blog
- name: Build cmd/tools/fast
run: cd cmd/tools/fast && v fast.v && ./fast
- name: V self compilation with -usecache
run: |
unset VFLAGS
v -usecache examples/hello_world.v && examples/hello_world
v -o v2 -usecache cmd/v
./v2 -o v3 -usecache cmd/v
./v3 version
./v3 -o tetris -usecache examples/tetris/tetris.v
- name: Test password input
run: v test examples/password/
- name: Test readline
run: v test examples/readline/
- name: Test leak detector
run: |
v -gc boehm_leak -o testcase_leak vlib/v/tests/testcase_leak.vv
./testcase_leak 2>leaks.txt
grep "Found 1 leaked object" leaks.txt && grep -P ", sz=\s?1000," leaks.txt
- name: Test leak detector not being active for normal compile
run: |
v -o testcase_leak vlib/v/tests/testcase_leak.vv
./testcase_leak 2>leaks.txt
[ "$(stat -c %s leaks.txt)" = "0" ]
gcc:
runs-on: ubuntu-20.04
timeout-minutes: 121
steps:
- uses: actions/checkout@v4
- name: Build V
run: make -j4 && ./v symlink
- name: All code is formatted
run: v test-cleancode
- name: Install dependencies for examples and tools
run: |
v retry -- sudo apt update
v retry -- sudo apt install --quiet -y postgresql libpq-dev libssl-dev sqlite3 libsqlite3-dev valgrind
v retry -- sudo apt install --quiet -y libfreetype6-dev libxi-dev libxcursor-dev libgl-dev libasound2-dev
- name: Recompile V with -cstrict and gcc
run: v -cc gcc -cg -cstrict -o v cmd/v
- name: Valgrind v.c
run: valgrind --error-exitcode=1 v -o v.c cmd/v
- name: Run sanitizers
run: |
v -o v2 cmd/v -cflags -fsanitize=thread
v -o v3 cmd/v -cflags "-fsanitize=undefined -fno-sanitize=alignment"
UBSAN_OPTIONS=print_stacktrace=1:halt_on_error=1 ./v2 -o v.c cmd/v
UBSAN_OPTIONS=print_stacktrace=1:halt_on_error=1 ./v3 -o v.c cmd/v
# - name: Test V
# run: v test-all
# - name: Test v binaries
# run: v -N -W build-vbinaries
# - name: Test v->js
# run: v -o hi.js examples/hello_v_js.v && node hi.js
# - name: Build Vorum
# run: v retry -- git clone --depth 1 https://github.com/vlang/vorum && cd vorum && v . && cd ..
- name: Freestanding
run: v -freestanding run vlib/os/bare/bare_example_linux.v
- name: V self compilation
run: v -o v2 cmd/v && ./v2 -o v3 cmd/v && ./v3 -o v4 cmd/v
- name: V self compilation with -usecache
run: |
unset VFLAGS
v -usecache examples/hello_world.v && examples/hello_world
v -o v2 -usecache cmd/v
./v2 -o v3 -usecache cmd/v
./v3 version
./v3 -o tetris -usecache examples/tetris/tetris.v
- name: Verify `v test` works
run: |
echo $VFLAGS
v cmd/tools/test_if_v_test_system_works.v
./cmd/tools/test_if_v_test_system_works
- name: Test pure V math module
run: v -exclude @vlib/math/*.c.v test vlib/math/
- name: Self tests
run: v test-self vlib
- name: Self tests (-prod)
run: v -o vprod -prod cmd/v && ./vprod test-self vlib
- name: Self tests (-cstrict)
run: VTEST_JUST_ESSENTIAL=1 V_CI_CSTRICT=1 v -cc gcc -cstrict test-self vlib
- name: Build examples
run: v -N -W build-examples
- name: Build tetris with -autofree
run: v -autofree -o tetris examples/tetris/tetris.v
- name: Build blog tutorial with -autofree
run: v -autofree -o blog tutorials/building_a_simple_web_blog_with_vweb/code/blog
- name: Build option_test.c.v with -autofree
run: v -autofree vlib/v/tests/option_test.c.v
- name: V self compilation with -parallel-cc
run: |
v -o v2 -parallel-cc cmd/v
- name: Build modules
run: |
v build-module vlib/os
v build-module vlib/builtin
v build-module vlib/strconv
v build-module vlib/time
v build-module vlib/term
v build-module vlib/math
v build-module vlib/strings
v build-module vlib/v/token
v build-module vlib/v/ast
v build-module vlib/v/parser
v build-module vlib/v/gen/c
v build-module vlib/v/depgraph
v build-module vlib/os/cmdline
- name: native machine code generation
run: |
v -o vprod -prod cmd/v
cd cmd/tools
echo "Generating a 1m line V file..."
../../vprod gen1m.v
./gen1m > 1m.v
echo "Building it..."
../../vprod -backend native -o 1m 1m.v
echo "Running it..."
./1m
ls
- name: compile vdoctor.v with -skip-unused and -prod
run: v -showcc -skip-unused -cc gcc -prod cmd/tools/vdoctor.v
- name: compile vup.v with -skip-unused and -prod
run: v -showcc -skip-unused -cc gcc -prod cmd/tools/vup.v
# - run: cd examples/native && v -native hello_world.v && ./hello_world
# - name: Coveralls GitHub Action
# uses: coverallsapp/[email protected]
# with:
# github-token: ${{ secrets.GITHUB_TOKEN }}
clang:
runs-on: ubuntu-20.04
timeout-minutes: 121
env:
VFLAGS: -cc clang
steps:
- uses: actions/checkout@v4
- name: Build V
run: make -j4 && ./v symlink
- name: All code is formatted
run: v test-cleancode
- name: Install dependencies for examples and tools
run: |
v retry -- sudo apt update
v retry -- sudo apt install --quiet -y postgresql libpq-dev libssl-dev sqlite3 libsqlite3-dev valgrind
v retry -- sudo apt install --quiet -y libfreetype6-dev libxi-dev libxcursor-dev libgl-dev libasound2-dev
v retry -- sudo apt install --quiet -y clang
- name: Recompile V with -cstrict and clang
run: v -cc clang -cg -cstrict -o v cmd/v
- name: Valgrind
run: valgrind --error-exitcode=1 v -o v.c cmd/v
- name: Run sanitizers
run: |
v -o v2 cmd/v -cflags -fsanitize=memory
v -o v3 cmd/v -cflags -fsanitize=thread
v -o v4 cmd/v -cflags -fsanitize=undefined
v -o v5 cmd/v -cflags -fsanitize=address,pointer-compare,pointer-subtract
UBSAN_OPTIONS=print_stacktrace=1:halt_on_error=1 ./v2 -o v.c cmd/v
UBSAN_OPTIONS=print_stacktrace=1:halt_on_error=1 ./v3 -o v.c cmd/v
UBSAN_OPTIONS=print_stacktrace=1:halt_on_error=1 ./v4 -o v.c cmd/v
ASAN_OPTIONS=detect_leaks=0 UBSAN_OPTIONS=print_stacktrace=1:halt_on_error=1 ./v5 -o v.c cmd/v
- name: v self compilation
run: v -o v2 cmd/v && ./v2 -o v3 cmd/v && ./v3 -o v4 cmd/v
- name: v self compilation with -usecache
run: |
unset VFLAGS
v -usecache examples/hello_world.v && examples/hello_world
v -o v2 -usecache cmd/v
./v2 -o v3 -usecache cmd/v
./v3 version
./v3 -o tetris -usecache examples/tetris/tetris.v
- name: Verify `v test` works
run: |
echo $VFLAGS
v cmd/tools/test_if_v_test_system_works.v
./cmd/tools/test_if_v_test_system_works
- name: Test pure V math module
run: v -exclude @vlib/math/*.c.v test vlib/math/
- name: Self tests
run: v test-self vlib
- name: Self tests (vprod)
run: v -o vprod -prod cmd/v && ./vprod test-self vlib
- name: Self tests (-cstrict)
run: VTEST_JUST_ESSENTIAL=1 V_CI_CSTRICT=1 ./vprod -cstrict test-self vlib
- name: Build examples
run: v -N -W build-examples
- name: Build examples with -autofree
run: |
v -autofree -experimental -o tetris examples/tetris/tetris.v
- name: Build modules
run: |
v build-module vlib/os
v build-module vlib/builtin
v build-module vlib/strconv
v build-module vlib/time
v build-module vlib/term
v build-module vlib/math
v build-module vlib/strings
v build-module vlib/v/token
v build-module vlib/v/ast
v build-module vlib/v/parser
v build-module vlib/v/gen/c
v build-module vlib/v/depgraph
v build-module vlib/os/cmdline
- name: native machine code generation
run: |
v -o vprod -prod cmd/v
cd cmd/tools
echo "Generating a 1m line V file..."
../../vprod gen1m.v
./gen1m > 1m.v
echo "Building it..."
../../vprod -backend native -o 1m 1m.v
echo "Running it..."
./1m
ls
# autofree-selfcompile:
# runs-on: ubuntu-20.04
# if: github.event_name != 'push' || github.ref == 'refs/heads/master' || github.repository != 'vlang/v'
# timeout-minutes: 121
# env:
# VFLAGS: -cc gcc
# steps:
# - uses: actions/checkout@v4
# - name: Build V
# run: make -j4
# - name: V self compilation with -autofree
# run: v -o v2 -autofree cmd/v && ./v2 -o v3 -autofree cmd/v && ./v3 -o v4 -autofree cmd/v
# musl:
# runs-on: ubuntu-20.04
# if: github.event_name != 'push' || github.ref == 'refs/heads/master' || github.repository != 'vlang/v'
# timeout-minutes: 121
# env:
# VFLAGS: -cc musl-gcc
# V_CI_MUSL: 1
# steps:
# - name: Build v
# run: echo $VFLAGS && make -j4 && ./v symlink
# - uses: actions/checkout@v4
# - name: Install dependencies for examples and tools
# run: v retry -- sudo apt install --quiet -y musl musl-tools libssl-dev sqlite3 libsqlite3-dev valgrind
# - name: Recompile V with -cg
# run: v -cg -o v cmd/v
# # - name: Test v binaries
# # run: v -N -W build-vbinaries
# # - name: Test v->js
# # run: v -o hi.js examples/hello_v_js.v && node hi.js
# - name: quick debug
# run: v -stats vlib/strconv/format_test.v
# - name: Self tests
# run: v test-self vlib