gc: use optimized mode by default (#10466)

pull/10469/head
Uwe Krüger 2021-06-15 14:43:00 +02:00 committed by GitHub
parent 60c880a0cc
commit f3408a2484
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 19 additions and 23 deletions

View File

@ -128,27 +128,27 @@ jobs:
run: | run: |
thirdparty/tcc/tcc.exe -version thirdparty/tcc/tcc.exe -version
./v -cg -o v cmd/v # Make sure vtcc can build itself twice ./v -cg -o v cmd/v # Make sure vtcc can build itself twice
- name: v self compilation with -gc boehm_full_opt - name: v self compilation with -gc boehm
run: | run: |
./v -gc boehm_full_opt -o v2 cmd/v && ./v2 -gc boehm_full_opt -o v3 cmd/v && ./v3 -gc boehm_full_opt -o v4 cmd/v ./v -gc boehm -o v2 cmd/v && ./v2 -gc boehm -o v3 cmd/v && ./v3 -gc boehm -o v4 cmd/v
mv v4 v mv v4 v
- name: v doctor - name: v doctor
run: | run: |
./v doctor ./v doctor
- name: Verify `v -gc boehm_full_opt test` works - name: Verify `v -gc boehm test` works
run: | run: |
./v -gc boehm_full_opt cmd/tools/test_if_v_test_system_works.v ./v -gc boehm cmd/tools/test_if_v_test_system_works.v
./cmd/tools/test_if_v_test_system_works ./cmd/tools/test_if_v_test_system_works
- name: Self tests with `-gc boehm_full_opt` with V compiler using Boehm-GC itself - name: Self tests with `-gc boehm` with V compiler using Boehm-GC itself
run: ./v -gc boehm_full_opt -silent test-self run: ./v -gc boehm -silent test-self
- name: Test leak detector - name: Test leak detector
run: | run: |
./v -gc boehm_leak -o testcase_leak vlib/v/tests/testcase_leak.v ./v -gc boehm_leak -o testcase_leak vlib/v/tests/testcase_leak.v
./testcase_leak 2>leaks.txt ./testcase_leak 2>leaks.txt
grep "Found 1 leaked object" leaks.txt && grep ", sz=1000," leaks.txt grep "Found 1 leaked object" leaks.txt && grep ", sz=1000," leaks.txt
- name: Test leak detector not being active for `-gc boehm_full_opt` - name: Test leak detector not being active for `-gc boehm`
run: | run: |
./v -gc boehm_full_opt -o testcase_leak vlib/v/tests/testcase_leak.v ./v -gc boehm -o testcase_leak vlib/v/tests/testcase_leak.v
./testcase_leak 2>leaks.txt ./testcase_leak 2>leaks.txt
[ "$(stat -c %s leaks.txt)" = "0" ] [ "$(stat -c %s leaks.txt)" = "0" ]
- name: Test leak detector not being active for normal compile - name: Test leak detector not being active for normal compile

View File

@ -443,9 +443,7 @@ pub fn (mut g Gen) init() {
if g.table.gostmts > 0 { if g.table.gostmts > 0 {
g.comptime_defines.writeln('#define __VTHREADS__ (1)') g.comptime_defines.writeln('#define __VTHREADS__ (1)')
} }
if g.pref.gc_mode in [.boehm_full, .boehm_incr, .boehm_full_opt, .boehm_incr_opt, .boehm, if g.pref.gc_mode in [.boehm_full, .boehm_incr, .boehm_full_opt, .boehm_incr_opt, .boehm_leak] {
.boehm_leak,
] {
g.comptime_defines.writeln('#define _VGCBOEHM (1)') g.comptime_defines.writeln('#define _VGCBOEHM (1)')
} }
if g.pref.is_debug || 'debug' in g.pref.compile_defines { if g.pref.is_debug || 'debug' in g.pref.compile_defines {

View File

@ -70,9 +70,7 @@ 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 in [.boehm_full, .boehm_incr, .boehm_full_opt, .boehm_incr_opt, .boehm, if g.pref.gc_mode in [.boehm_full, .boehm_incr, .boehm_full_opt, .boehm_incr_opt, .boehm_leak] {
.boehm_leak,
] {
g.writeln('#if defined(_VGCBOEHM)') g.writeln('#if defined(_VGCBOEHM)')
if g.pref.gc_mode == .boehm_leak { if g.pref.gc_mode == .boehm_leak {
g.writeln('\tGC_set_find_leak(1);') g.writeln('\tGC_set_find_leak(1);')
@ -176,9 +174,7 @@ 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 in [.boehm_full, .boehm_incr, .boehm_full_opt, .boehm_incr_opt, .boehm, if g.pref.gc_mode in [.boehm_full, .boehm_incr, .boehm_full_opt, .boehm_incr_opt, .boehm_leak] {
.boehm_leak,
] {
g.writeln('#if defined(_VGCBOEHM)') g.writeln('#if defined(_VGCBOEHM)')
if g.pref.gc_mode == .boehm_leak { if g.pref.gc_mode == .boehm_leak {
g.writeln('\tGC_set_find_leak(1);') g.writeln('\tGC_set_find_leak(1);')

View File

@ -441,7 +441,7 @@ fn (mut g Gen) call_expr(node ast.CallExpr) {
g.inside_call = false g.inside_call = false
} }
gen_keep_alive := node.is_keep_alive && node.return_type != ast.void_type gen_keep_alive := node.is_keep_alive && node.return_type != ast.void_type
&& g.pref.gc_mode in [.boehm_full, .boehm_incr, .boehm_full_opt, .boehm_incr_opt, .boehm] && g.pref.gc_mode in [.boehm_full, .boehm_incr, .boehm_full_opt, .boehm_incr_opt]
gen_or := node.or_block.kind != .absent // && !g.is_autofree gen_or := node.or_block.kind != .absent // && !g.is_autofree
is_gen_or_and_assign_rhs := gen_or && !g.discard_or_result is_gen_or_and_assign_rhs := gen_or && !g.discard_or_result
cur_line := if is_gen_or_and_assign_rhs || gen_keep_alive { // && !g.is_autofree { cur_line := if is_gen_or_and_assign_rhs || gen_keep_alive { // && !g.is_autofree {
@ -954,7 +954,7 @@ fn (mut g Gen) fn_call(node ast.CallExpr) {
g.write(json_obj) g.write(json_obj)
} else { } else {
if node.is_keep_alive if node.is_keep_alive
&& g.pref.gc_mode in [.boehm_full, .boehm_incr, .boehm_full_opt, .boehm_incr_opt, .boehm] { && g.pref.gc_mode in [.boehm_full, .boehm_incr, .boehm_full_opt, .boehm_incr_opt] {
cur_line := g.go_before_stmt(0) cur_line := g.go_before_stmt(0)
tmp_cnt_save = g.keep_alive_call_pregen(node) tmp_cnt_save = g.keep_alive_call_pregen(node)
g.write(cur_line) g.write(cur_line)

View File

@ -29,7 +29,6 @@ pub enum GarbageCollectionMode {
boehm_incr // incremental garbage colletion mode boehm_incr // incremental garbage colletion mode
boehm_full_opt // full garbage collection mode boehm_full_opt // full garbage collection mode
boehm_incr_opt // incremental garbage colletion mode boehm_incr_opt // incremental garbage colletion mode
boehm // default Boehm-GC mode for architecture
boehm_leak // leak detection mode (makes `gc_check_leaks()` work) boehm_leak // leak detection mode (makes `gc_check_leaks()` work)
} }
@ -262,7 +261,7 @@ pub fn parse_args(known_external_commands []string, args []string) (&Preferences
'-gc' { '-gc' {
gc_mode := cmdline.option(current_args, '-gc', '') gc_mode := cmdline.option(current_args, '-gc', '')
match gc_mode { match gc_mode {
'' { '', 'none' {
res.gc_mode = .no_gc res.gc_mode = .no_gc
} }
'boehm_full' { 'boehm_full' {
@ -288,8 +287,10 @@ pub fn parse_args(known_external_commands []string, args []string) (&Preferences
parse_define(mut res, 'gcboehm_opt') parse_define(mut res, 'gcboehm_opt')
} }
'boehm' { 'boehm' {
res.gc_mode = .boehm res.gc_mode = .boehm_full_opt // default mode
parse_define(mut res, 'gcboehm') parse_define(mut res, 'gcboehm')
parse_define(mut res, 'gcboehm_full')
parse_define(mut res, 'gcboehm_opt')
} }
'boehm_leak' { 'boehm_leak' {
res.gc_mode = .boehm_leak res.gc_mode = .boehm_leak
@ -298,12 +299,13 @@ pub fn parse_args(known_external_commands []string, args []string) (&Preferences
} }
else { else {
eprintln('unknown garbage collection mode `-gc $gc_mode`, supported modes are:`') eprintln('unknown garbage collection mode `-gc $gc_mode`, supported modes are:`')
eprintln(' `-gc boehm` ............ default mode for the platform') eprintln(' `-gc boehm` ............ default GC-mode (currently `boehm_full_opt`)')
eprintln(' `-gc boehm_full` ....... classic full collection') eprintln(' `-gc boehm_full` ....... classic full collection')
eprintln(' `-gc boehm_incr` ....... incremental collection') eprintln(' `-gc boehm_incr` ....... incremental collection')
eprintln(' `-gc boehm_full_opt` ... optimized classic full collection') eprintln(' `-gc boehm_full_opt` ... optimized classic full collection')
eprintln(' `-gc boehm_incr_opt` ... optimized incremental collection') eprintln(' `-gc boehm_incr_opt` ... optimized incremental collection')
eprintln(' `-gc boehm_leak` ....... leak detection (for debugging)') eprintln(' `-gc boehm_leak` ....... leak detection (for debugging)')
eprintln(' `-gc none` ............. no garbage collection')
exit(1) exit(1)
} }
} }