builtin,cgen: fix -gc boehm issues with maps; add a CI job for it to prevent regressions (#9453)
parent
5b2cec6c6b
commit
522d70b48d
|
@ -102,6 +102,45 @@ jobs:
|
||||||
run: |
|
run: |
|
||||||
./v tutorials/building_a_simple_web_blog_with_vweb/code/blog
|
./v tutorials/building_a_simple_web_blog_with_vweb/code/blog
|
||||||
|
|
||||||
|
ubuntu-tcc-boehm-gc:
|
||||||
|
runs-on: ubuntu-20.04
|
||||||
|
timeout-minutes: 30
|
||||||
|
env:
|
||||||
|
VFLAGS: -cc tcc -no-retry-compilation
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
- name: Install dependencies
|
||||||
|
run: |
|
||||||
|
sudo rm -f /etc/apt/sources.list.d/dotnetdev.list /etc/apt/sources.list.d/microsoft-prod.list; sudo apt-get update;
|
||||||
|
sudo apt-get install --quiet -y libssl-dev sqlite3 libsqlite3-dev valgrind
|
||||||
|
sudo apt-get install --quiet -y libglfw3 libglfw3-dev libfreetype6-dev libxi-dev libxcursor-dev libasound2-dev
|
||||||
|
sudo apt-get install --quiet -y libgc-dev
|
||||||
|
## sudo apt-get install --quiet -y libsdl2-dev libsdl2-ttf-dev libsdl2-mixer-dev libsdl2-image-dev
|
||||||
|
## The following is needed for examples/wkhtmltopdf.v
|
||||||
|
wget https://github.com/wkhtmltopdf/packaging/releases/download/0.12.6-1/wkhtmltox_0.12.6-1.focal_amd64.deb
|
||||||
|
sudo apt-get install xfonts-75dpi xfonts-base
|
||||||
|
sudo dpkg -i wkhtmltox_0.12.6-1.focal_amd64.deb
|
||||||
|
- name: Build v
|
||||||
|
run: |
|
||||||
|
echo $VFLAGS
|
||||||
|
make
|
||||||
|
- name: Test v->c
|
||||||
|
run: |
|
||||||
|
thirdparty/tcc/tcc.exe -version
|
||||||
|
./v -cg -o v cmd/v # Make sure vtcc can build itself twice
|
||||||
|
- name: v self compilation with -gc boehm
|
||||||
|
run: ./v -gc boehm -o v2 cmd/v && ./v2 -gc boehm -o v3 cmd/v && ./v3 -gc boehm -o v4 cmd/v
|
||||||
|
- name: v doctor
|
||||||
|
run: |
|
||||||
|
./v doctor
|
||||||
|
- name: Verify `v -gc boehm test` works
|
||||||
|
run: |
|
||||||
|
./v -gc boehm cmd/tools/test_if_v_test_system_works.v
|
||||||
|
./cmd/tools/test_if_v_test_system_works
|
||||||
|
- name: Self tests with `-gc boehm`
|
||||||
|
## The test cases are run with non-gc `v` for now
|
||||||
|
run: ./v -gc boehm -silent test-self
|
||||||
|
|
||||||
misc-tooling:
|
misc-tooling:
|
||||||
runs-on: ubuntu-20.04
|
runs-on: ubuntu-20.04
|
||||||
timeout-minutes: 30
|
timeout-minutes: 30
|
||||||
|
|
|
@ -108,7 +108,11 @@ mut:
|
||||||
|
|
||||||
[inline]
|
[inline]
|
||||||
fn new_dense_array(key_bytes int, value_bytes int) DenseArray {
|
fn new_dense_array(key_bytes int, value_bytes int) DenseArray {
|
||||||
slot_bytes := key_bytes + value_bytes
|
mut slot_bytes := key_bytes + value_bytes
|
||||||
|
$if gcboehm ? {
|
||||||
|
align, mask := $if x64 { 7, int(0xfffffff8) } $else { 3, int(0xfffffffc) }
|
||||||
|
slot_bytes = (slot_bytes + align) & mask
|
||||||
|
}
|
||||||
cap := 8
|
cap := 8
|
||||||
return DenseArray{
|
return DenseArray{
|
||||||
key_bytes: key_bytes
|
key_bytes: key_bytes
|
||||||
|
|
|
@ -67,6 +67,11 @@ fn (mut g Gen) gen_c_main_function_header() {
|
||||||
|
|
||||||
fn (mut g Gen) gen_c_main_header() {
|
fn (mut g Gen) gen_c_main_header() {
|
||||||
g.gen_c_main_function_header()
|
g.gen_c_main_function_header()
|
||||||
|
if g.pref.gc_mode == .boehm {
|
||||||
|
g.writeln('#if defined(_VGCBOEHM)')
|
||||||
|
g.writeln('\tGC_INIT();')
|
||||||
|
g.writeln('#endif')
|
||||||
|
}
|
||||||
g.writeln('\t_vinit(___argc, (voidptr)___argv);')
|
g.writeln('\t_vinit(___argc, (voidptr)___argv);')
|
||||||
if g.pref.is_prof {
|
if g.pref.is_prof {
|
||||||
g.writeln('')
|
g.writeln('')
|
||||||
|
@ -150,6 +155,11 @@ pub fn (mut g Gen) gen_c_main_for_tests() {
|
||||||
main_fn_start_pos := g.out.len
|
main_fn_start_pos := g.out.len
|
||||||
g.writeln('')
|
g.writeln('')
|
||||||
g.gen_c_main_function_header()
|
g.gen_c_main_function_header()
|
||||||
|
if g.pref.gc_mode == .boehm {
|
||||||
|
g.writeln('#if defined(_VGCBOEHM)')
|
||||||
|
g.writeln('\tGC_INIT();')
|
||||||
|
g.writeln('#endif')
|
||||||
|
}
|
||||||
g.writeln('\t_vinit(___argc, (voidptr)___argv);')
|
g.writeln('\t_vinit(___argc, (voidptr)___argv);')
|
||||||
all_tfuncs := g.get_all_test_function_names()
|
all_tfuncs := g.get_all_test_function_names()
|
||||||
if g.pref.is_stats {
|
if g.pref.is_stats {
|
||||||
|
|
Loading…
Reference in New Issue