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: |
 | 
			
		||||
          ./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:
 | 
			
		||||
    runs-on: ubuntu-20.04
 | 
			
		||||
    timeout-minutes: 30
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -108,7 +108,11 @@ mut:
 | 
			
		|||
 | 
			
		||||
[inline]
 | 
			
		||||
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
 | 
			
		||||
	return DenseArray{
 | 
			
		||||
		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() {
 | 
			
		||||
	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);')
 | 
			
		||||
	if g.pref.is_prof {
 | 
			
		||||
		g.writeln('')
 | 
			
		||||
| 
						 | 
				
			
			@ -150,6 +155,11 @@ pub fn (mut g Gen) gen_c_main_for_tests() {
 | 
			
		|||
	main_fn_start_pos := g.out.len
 | 
			
		||||
	g.writeln('')
 | 
			
		||||
	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);')
 | 
			
		||||
	all_tfuncs := g.get_all_test_function_names()
 | 
			
		||||
	if g.pref.is_stats {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue