aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cmake/GetCompileFlags.cmake10
-rw-r--r--src/nvim/CMakeLists.txt14
-rw-r--r--src/nvim/message.c16
-rw-r--r--src/nvim/testdir/runtest.vim1
-rw-r--r--src/nvim/testdir/test_timers.vim2
-rw-r--r--test/functional/core/job_spec.lua71
6 files changed, 102 insertions, 12 deletions
diff --git a/cmake/GetCompileFlags.cmake b/cmake/GetCompileFlags.cmake
index 482eacca16..667b97350c 100644
--- a/cmake/GetCompileFlags.cmake
+++ b/cmake/GetCompileFlags.cmake
@@ -13,6 +13,11 @@ function(get_compile_flags _compile_flags)
get_directory_property(compile_definitions
DIRECTORY "src/nvim"
COMPILE_DEFINITIONS)
+ get_target_property(compile_definitions_target nvim COMPILE_DEFINITIONS)
+ if(compile_definitions_target)
+ list(APPEND compile_definitions ${compile_definitions_target})
+ list(REMOVE_DUPLICATES compile_definitions)
+ endif()
# NOTE: list(JOIN) requires CMake 3.12, string(CONCAT) requires CMake 3.
string(REPLACE ";" " -D" compile_definitions "${compile_definitions}")
if(compile_definitions)
@@ -28,6 +33,11 @@ function(get_compile_flags _compile_flags)
get_directory_property(compile_options
DIRECTORY "src/nvim"
COMPILE_OPTIONS)
+ get_target_property(compile_options_target nvim COMPILE_OPTIONS)
+ if(compile_options_target)
+ list(APPEND compile_options ${compile_options_target})
+ list(REMOVE_DUPLICATES compile_options)
+ endif()
# NOTE: list(JOIN) requires CMake 3.12.
string(REPLACE ";" " " compile_options "${compile_options}")
string(REPLACE
diff --git a/src/nvim/CMakeLists.txt b/src/nvim/CMakeLists.txt
index 22f3153230..06957dd77d 100644
--- a/src/nvim/CMakeLists.txt
+++ b/src/nvim/CMakeLists.txt
@@ -552,19 +552,19 @@ if(CLANG_ASAN_UBSAN)
else()
set(SANITIZE_RECOVER -fno-sanitize-recover) # Clang 3.5-
endif()
- set_property(TARGET nvim APPEND_STRING PROPERTY COMPILE_FLAGS "-DEXITFREE ")
- set_property(TARGET nvim APPEND_STRING PROPERTY COMPILE_FLAGS "${SANITIZE_RECOVER} -fno-omit-frame-pointer -fno-optimize-sibling-calls -fsanitize=address -fsanitize=undefined -fsanitize-blacklist=${PROJECT_SOURCE_DIR}/src/.asan-blacklist")
+ set_property(TARGET nvim APPEND PROPERTY COMPILE_DEFINITIONS EXITFREE)
+ set_property(TARGET nvim APPEND PROPERTY COMPILE_OPTIONS ${SANITIZE_RECOVER} -fno-omit-frame-pointer -fno-optimize-sibling-calls -fsanitize=address -fsanitize=undefined -fsanitize-blacklist=${PROJECT_SOURCE_DIR}/src/.asan-blacklist)
set_property(TARGET nvim APPEND_STRING PROPERTY LINK_FLAGS "-fsanitize=address -fsanitize=undefined ")
elseif(CLANG_MSAN)
message(STATUS "Enabling Clang memory sanitizer for nvim.")
- set_property(TARGET nvim APPEND_STRING PROPERTY COMPILE_FLAGS "-DEXITFREE ")
- set_property(TARGET nvim APPEND_STRING PROPERTY COMPILE_FLAGS "-fsanitize=memory -fsanitize-memory-track-origins -fno-omit-frame-pointer -fno-optimize-sibling-calls ")
+ set_property(TARGET nvim APPEND PROPERTY COMPILE_DEFINITIONS EXITFREE)
+ set_property(TARGET nvim APPEND PROPERTY COMPILE_OPTIONS -fsanitize=memory -fsanitize-memory-track-origins -fno-omit-frame-pointer -fno-optimize-sibling-calls)
set_property(TARGET nvim APPEND_STRING PROPERTY LINK_FLAGS "-fsanitize=memory -fsanitize-memory-track-origins ")
elseif(CLANG_TSAN)
message(STATUS "Enabling Clang thread sanitizer for nvim.")
- set_property(TARGET nvim APPEND_STRING PROPERTY COMPILE_FLAGS "-DEXITFREE ")
- set_property(TARGET nvim APPEND_STRING PROPERTY COMPILE_FLAGS "-fsanitize=thread ")
- set_property(TARGET nvim APPEND_STRING PROPERTY COMPILE_FLAGS "-fPIE ")
+ set_property(TARGET nvim APPEND PROPERTY COMPILE_DEFINITIONS EXITFREE)
+ set_property(TARGET nvim APPEND PROPERTY COMPILE_OPTIONS -fsanitize=thread)
+ set_property(TARGET nvim APPEND PROPERTY COMPILE_OPTIONS -fPIE)
set_property(TARGET nvim APPEND_STRING PROPERTY LINK_FLAGS "-fsanitize=thread ")
endif()
diff --git a/src/nvim/message.c b/src/nvim/message.c
index 6e935022ca..9bea9f5c4a 100644
--- a/src/nvim/message.c
+++ b/src/nvim/message.c
@@ -582,9 +582,25 @@ static bool emsg_multiline(const char *s, bool multiline)
}
redir_write(s, strlen(s));
}
+
+ // Log (silent) errors as debug messages.
+ if (sourcing_name != NULL && sourcing_lnum != 0) {
+ DLOG("(:silent) %s (%s (line %ld))",
+ s, sourcing_name, (long)sourcing_lnum);
+ } else {
+ DLOG("(:silent) %s", s);
+ }
+
return true;
}
+ // Log editor errors as INFO.
+ if (sourcing_name != NULL && sourcing_lnum != 0) {
+ ILOG("%s (%s (line %ld))", s, sourcing_name, (long)sourcing_lnum);
+ } else {
+ ILOG("%s", s);
+ }
+
ex_exitval = 1;
// Reset msg_silent, an error causes messages to be switched back on.
diff --git a/src/nvim/testdir/runtest.vim b/src/nvim/testdir/runtest.vim
index 5c62538b7d..4ddb15c9de 100644
--- a/src/nvim/testdir/runtest.vim
+++ b/src/nvim/testdir/runtest.vim
@@ -286,6 +286,7 @@ let s:flaky_tests = [
\ 'Test_quoteplus()',
\ 'Test_quotestar()',
\ 'Test_reltime()',
+ \ 'Test_repeat_many()',
\ 'Test_repeat_three()',
\ 'Test_terminal_composing_unicode()',
\ 'Test_terminal_redir_file()',
diff --git a/src/nvim/testdir/test_timers.vim b/src/nvim/testdir/test_timers.vim
index 9384989a35..24c735865c 100644
--- a/src/nvim/testdir/test_timers.vim
+++ b/src/nvim/testdir/test_timers.vim
@@ -48,7 +48,7 @@ func Test_repeat_many()
endif
sleep 200m
call timer_stop(timer)
- call assert_inrange((has('mac') ? 1 : 2), LoadAdjust(4), g:val)
+ call assert_inrange((has('mac') ? 1 : 2), LoadAdjust(5), g:val)
endfunc
func Test_with_partial_callback()
diff --git a/test/functional/core/job_spec.lua b/test/functional/core/job_spec.lua
index a1d9f50720..2531b45521 100644
--- a/test/functional/core/job_spec.lua
+++ b/test/functional/core/job_spec.lua
@@ -768,16 +768,79 @@ describe('jobs', function()
-- ..c.."', '-c', '"..c.."'])")
-- Create child with several descendants.
+ if iswin() then
+ source([[
+ function! s:formatprocs(pid, prefix)
+ let result = ''
+ let result .= a:prefix . printf("%-24.24s%6s %12.12s %s\n",
+ \ s:procs[a:pid]['name'],
+ \ a:pid,
+ \ s:procs[a:pid]['Session Name'],
+ \ s:procs[a:pid]['Session'])
+ if has_key(s:procs[a:pid], 'children')
+ for pid in s:procs[a:pid]['children']
+ let result .= s:formatprocs(pid, a:prefix . ' ')
+ endfor
+ endif
+ return result
+ endfunction
+
+ function! PsTree() abort
+ let s:procs = {}
+ for proc in map(
+ \ map(
+ \ systemlist('tasklist /NH'),
+ \ 'substitute(v:val, "\r", "", "")'),
+ \ 'split(v:val, "\\s\\+")')
+ if len(proc) == 6
+ let s:procs[proc[1]] ..']]'..[[= {'name': proc[0],
+ \ 'Session Name': proc[2],
+ \ 'Session': proc[3]}
+ endif
+ endfor
+ for pid in keys(s:procs)
+ let children = nvim_get_proc_children(str2nr(pid))
+ if !empty(children)
+ let s:procs[pid]['children'] = children
+ for cpid in children
+ let s:procs[printf('%d', cpid)]['parent'] = str2nr(pid)
+ endfor
+ endif
+ endfor
+ let result = ''
+ for pid in sort(keys(s:procs), {i1, i2 -> i1 - i2})
+ if !has_key(s:procs[pid], 'parent')
+ let result .= s:formatprocs(pid, '')
+ endif
+ endfor
+ return result
+ endfunction
+ ]])
+ end
local sleep_cmd = (iswin()
and 'ping -n 31 127.0.0.1'
or 'sleep 30')
local j = eval("jobstart('"..sleep_cmd..' | '..sleep_cmd..' | '..sleep_cmd.."')")
local ppid = funcs.jobpid(j)
local children
- retry(nil, nil, function()
- children = meths.get_proc_children(ppid)
- eq((iswin() and 4 or 3), #children)
- end)
+ if iswin() then
+ local status, result = pcall(retry, nil, nil, function()
+ children = meths.get_proc_children(ppid)
+ -- On Windows conhost.exe may exist, and
+ -- e.g. vctip.exe might appear. #10783
+ ok(#children >= 3 and #children <= 5)
+ end)
+ if not status then
+ print('')
+ print(eval('PsTree()'))
+ error(result)
+ end
+ else
+ retry(nil, nil, function()
+ children = meths.get_proc_children(ppid)
+ eq(3, #children)
+ end)
+ end
-- Assert that nvim_get_proc() sees the children.
for _, child_pid in ipairs(children) do
local info = meths.get_proc(child_pid)